[英]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.