【问题标题】:How to provide module dependencies for required script in a sibling directory如何在同级目录中为所需脚本提供模块依赖项
【发布时间】:2013-10-14 13:27:26
【问题描述】:

我正在运行一个 node.js 脚本 (foo.js),requires 是一个位于同级目录中的帮助脚本。

//foo.js:
var magic = require('../util/magic');

magic.js 使用 npm 模块 express。但是,“程序”的主目录(包含package.jsonnode_modules)是foo.js所在的文件夹。

/program  
  /node_modules  
     /express
     ..
  /foo.js  
  /package.json  
/util  
  /magic.js  

运行程序时,ma​​gic.js中的require('express')语句失败-找不到模块。

有没有办法让 node.js 从program/node_modules 目录加载express 模块?

我想避免以下任何一种情况:

  • 将 node_modules 目录移动到 utilprogram 的公共父目录
  • node_modules 目录添加到util
  • 将所需模块的引用传递给magic.js

感谢您的帮助!

【问题讨论】:

    标签: node.js module require


    【解决方案1】:

    您可以提供相对路径而不是模块名称,因为如果您不指定路径,Node.js 将通过这种方式检查模块文件夹:

    /util/node_modules
    /node_modules
    

    既然您知道模块已经存在的位置,那么只需这样做:

    var express = require('../program/node_modules/express');
    

    但是,在开发模块时,您应该将与模块相关的所有文件放在模块本身中。如果您不这样做,它们在发布时也不会与模块一起打包,并且您会遇到无法访问包文件中指定的依赖项的不便。

    【讨论】:

    • 出于习惯,我忽略了直接引用node_modules 的可能性。但我同意在我的特定用例中这是一个很好且简单的解决方案!谢谢!
    • /program 中的模块实际上从未发布到 npm 注册表。 /program/package.json 仅用于加载构建程序所需的依赖项(表示在“devDependencies”中)。我们尝试运行一种二元策略,人们可以通过 npm 请求模块,或者签出 git 存储库。不过,它仍处于不断变化的状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2014-09-05
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    相关资源
    最近更新 更多