我如何从节点包库中获取根项目目录中的内容?
How do I require something in root project directory from inside node package library?
我想创建一个节点包模块,但我很难要求根项目目录中的文件在我创建的节点包模块中使用。
如果我有这样的目录结构
- node_modules
- library_name
- lib
- index.js
- bin
- run.sh
- config.js
如果 run.sh 调用,它将 运行 index.js。在 index.js 内,我如何解析到根目录,稍后我可以在 index.js 内要求 config.js?
如果您在 index.js
中并且 config.js
在图表中 node_modules
上方的目录中,那么您可以像这样构建到 config.js
的路径:
const path = require('path');
let configFilename = path.join(__dirname, "../../../", "config.js");
__dirname
是index.js
所在的目录。
第一个 ../
带您进入 library_name
目录。
第二个 ../
带您进入 node_modules
目录。
第三个 ../
将您带到 node_modules
的父级(您称之为项目根),其中 config.js
似乎是。
如果您真的希望您的模块独立于它的安装方式或 NPM 将来可能发生的变化,那么您需要以某种方式以某种方式传递配置文件的位置:
- 通过确保当前工作目录设置为项目根目录,这样您就可以使用
process.cwd()
访问配置文件。
- 通过在启动项目时将环境变量设置为根目录。
- 通过将根目录传递给模块构造函数。
- 通过加载配置对象本身并将其传递给模块构造函数。
二进制包可以显式接受配置路径作为参数。
如果二进制包不 运行 作为 NPM 脚本,它不应该依赖于父项目结构。
如果通过 NPM 脚本打包二进制 运行s:
"scripts": {
"foo": "library_name"
}
这会将当前工作目录设置为项目根目录,因此可能需要:
const config = require(path.join(process.cwd(), 'config'));
这两种方法可以结合使用;这通常用于向第三方 CLI(Mocha 等)提供具有默认位置的配置文件。
我创建的模块与您的模块相同。
然后我调用 const config = require('../config')
,它起作用了。
我想创建一个节点包模块,但我很难要求根项目目录中的文件在我创建的节点包模块中使用。
如果我有这样的目录结构
- node_modules
- library_name
- lib
- index.js
- bin
- run.sh
- config.js
如果 run.sh 调用,它将 运行 index.js。在 index.js 内,我如何解析到根目录,稍后我可以在 index.js 内要求 config.js?
如果您在 index.js
中并且 config.js
在图表中 node_modules
上方的目录中,那么您可以像这样构建到 config.js
的路径:
const path = require('path');
let configFilename = path.join(__dirname, "../../../", "config.js");
__dirname
是index.js
所在的目录。
第一个 ../
带您进入 library_name
目录。
第二个 ../
带您进入 node_modules
目录。
第三个 ../
将您带到 node_modules
的父级(您称之为项目根),其中 config.js
似乎是。
如果您真的希望您的模块独立于它的安装方式或 NPM 将来可能发生的变化,那么您需要以某种方式以某种方式传递配置文件的位置:
- 通过确保当前工作目录设置为项目根目录,这样您就可以使用
process.cwd()
访问配置文件。 - 通过在启动项目时将环境变量设置为根目录。
- 通过将根目录传递给模块构造函数。
- 通过加载配置对象本身并将其传递给模块构造函数。
二进制包可以显式接受配置路径作为参数。
如果二进制包不 运行 作为 NPM 脚本,它不应该依赖于父项目结构。
如果通过 NPM 脚本打包二进制 运行s:
"scripts": {
"foo": "library_name"
}
这会将当前工作目录设置为项目根目录,因此可能需要:
const config = require(path.join(process.cwd(), 'config'));
这两种方法可以结合使用;这通常用于向第三方 CLI(Mocha 等)提供具有默认位置的配置文件。
我创建的模块与您的模块相同。
然后我调用 const config = require('../config')
,它起作用了。