javascript - NodeJS fs 和 require 在不同的地方查找

标签 javascript node.js require fs

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

相关文章:

javascript - 未捕获的类型错误 : Cannot set property 'selected' of undefined

javascript - 无法遍历数组并保存到 Mongoose 。回调问题?

javascript - JQuery 将事件扩展到给定类的新对象

php - 如何在 Linux PHP 中使用 require/include

javascript - 需要 Node 中的单例实例

javascript - nodejs require 不是 js 文件的函数

javascript - Internet Explorer 8 中的 JQuery 问题

node.js - paypal rest sdk如何识别哪个卡号属于哪个卡种?

node.js - Heroku H99 错误可以做什么?

javascript - 如何在 forEach 中使用 Promise 来检查 forEach 是否完成?