我试图循环遍历一个目录并需要其中的每个文件。我的代码正在运行,但我想知道为什么我必须修改 fs 函数中的路径。 (下面的代码删除了无用的信息)
文件夹结构:
project
|-- bin
| `-- start
|-- modules
| |-- file1.js
| `-- file2.js
`-- package.json
/bin/开始:
#!/usr/bin/env node
// Require dependencies
var fs = require('fs')
// Get modules
// NOTE: fs is looking in the project folder, but this file is in the bin folder
fs.readdir('./modules', function (err, files) {
// Handle error
if (err) {
console.log(err)
process.exit(1)
}
// Loop through files
files.forEach(function (file, index) {
// Get info about file
fs.stat('./modules/' + file, function (err, stat) {
// Handle error
if (err) {
console.log(err)
process.exit(1)
}
// If it is a file
if (stat.isFile()) {
// NOTE: require is looking in the bin folder, and this file is in the bin folder
require('../modules/' + file)
}
})
})
})
package.json:
{
"name": "modular-chat",
"version": "1.0.0",
"description": "A simple modular example of a chat application",
"scripts": {
"start": "node ./bin/start"
},
"author": "JoshyRobot",
"license": "MIT"
}
最佳答案
require
是一个 Node 函数。只是 require
在解析相对路径时使用 __dirname
作为基本名称,而不是当前工作目录,这也是 process.cwd()
的结果>。
您只需将 __dirname
连接到相对路径,然后再将其传递给 fs
函数。使用 path.join(__dirname, '../modules')
和 path.join(__dirname, '../modules', file)
。在 fs.readdir
和 fs.stat
调用中使用这些:
fs.readdir(path.join(__dirname, '../modules'), function (err, files) {
fs.stat(path.join(__dirname, '../modules', file), function (err, stat) {
这会使您的 fs 调用和 require 对齐,以便加载正确的文件。
做相反的事情并让 require 加载任何路径也不难:
而不是require(path.join('../modules/', file))
:
require(path.join(process.cwd(), '../modules/', file))
这是有效的,因为 require
不会像通过在前面添加 __dirname
来更改相对路径那样更改绝对路径。
关于javascript - NodeJS fs 和 require 在不同的地方查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40816860/