gpt4 book ai didi

javascript - NodeJS fs 并需要在不同的地方寻找

转载 作者:行者123 更新时间:2023-11-29 21:12:58 25 4
gpt4 key购买 nike

我正在尝试遍历一个目录并要求其中的每个文件。我的代码正在运行,但我想知道为什么我必须修改 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.readdirfs.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 并需要在不同的地方寻找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40816860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com