簡體   English   中英

我如何正確要求同一目錄中的JS文件?

[英]How do I require JS files within the same directory properly?

我在理解require()如何在JS中工作時遇到了麻煩。

這是我遇到的問題:

我的文件夾結構如下所示:

test

  ->test

    ->a.js

    ->b.js

    ->c.js

這是我在每個文件中擁有的代碼:

c.js

function c() {
  console.log("c")
}

module.exports = c;

b.js

let c = require("./c");

function b() {
  c();
  console.log("b");
}

exports.b = b;

a.js

let b = require("./test/b")

當我在a.js執行代碼時,它運行良好。

但是當我在b.js執行代碼時,會引發錯誤:

module.js:472
    throw err;
    ^

Error: Cannot find module './c'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at [stdin]:3:9
    at ContextifyScript.Script.runInThisContext (vm.js:23:33)
    at Object.runInThisContext (vm.js:95:38)
    at Object.<anonymous> ([stdin]-wrapper:6:22)
    at Module._compile (module.js:571:32)
    at evalScript (bootstrap_node.js:391:27)

但是當我將b.js的內容更改為:

let c = require("./test/c");

function b() {
  c();
  console.log("b");
}

module.exports = b;

現在, a.js引發錯誤:

module.js:472
    throw err;
    ^

Error: Cannot find module './test/c'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/sp/Desktop/test/test/b.js:1:71)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)

我不明白什么?

節點從它的require()文件中尋找module對象。 專門查看module.exports

// File a.js
const foo = "Hello"
module.exports = foo

// File b.js
const bar = "World"
module.exports = bar

// File index.js
const a = require('./a')
const b = require('./b')

console.log(a, b) //Hello World

您還可以導出對象

module.exports = { foo, bar }

您這樣導入的

const { foo, bar} = require("./file")

當您不指定位置時,它會在node_modulesnode_modules

const express = require('express') // Looks inside node_modules for express

我假設您都是從/test/根目錄運行它們。

從根目錄運行a.js./test/b /test/test/b指向/test/test/b

從根目錄運行b.js./c /test/c指向/test/c ,該目錄不存在。

當您從根目錄運行a.js時,它需要b.js./test/b ,然后需要c.js通過./c從其自己的目錄進入相對路徑,這就是為什么如果您運行a.js則它可以工作的原因。

現在運行b.js從上/test/目錄結果b.js尋找c.js/test/c ,而不是/test/test/c

更改b.jslet c = require("./test/c"); 導致以下情況:

a.js仍然需要b.js aka /test/test/b ./test/b 現在, b.js嘗試從./test/c要求指向不存在的/test/test/test/c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM