[英]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_modules
中node_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.js
以let 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.