我有很多项目都遵循特定的文件夹结构和约定。
我不想复制整个项目,而是希望每个项目都有一个配置对象,每个项目都链接到全局框架。
我已经将配置传递给每个项目的index.js,但是当我从每个项目中删除node_modules文件夹时,它不再有效。
示例:
/gulp-framework
tasks/
index.js
package.json
node_modules/
/project-a
gulpfile.js
configuration.js
/project-b
gulpfile.js
configuration.js
因此,使用上述结构,理想的方法是运行:
cd /project-a && gulp
然而,这显然会返回
Cannot find module 'gulp', please try npm install gulp
所以我的问题是,有没有办法在项目中使用gulpfile,但node_modules路径是否设置为全局node_modules文件夹?
答案 0 :(得分:1)
您有两种选择:
Loading from global modules。例如,在Linux / Mac上,您可以像这样设置NODE_PATH
变量:
export NODE_PATH="/path/to/gulp-framework/node_modules"
但并不是真的值得推荐,因为这样很难说明模块的位置。您还必须在要构建项目的每台计算机上设置环境变量(尽管您可以为此编写shell脚本包装器)。
制作project-a
和project-b
个gulp-framework
个子目录。
如果在当前目录中找不到模块,节点traverses all parent directories会查找node_modules
个文件夹,因此您的项目可以继续"继承"来自gulp-frameworks
文件夹的模块。
对于Windows,请更新NODE_PATH
中的gulpfile.js
变量。
下面更新了全局node_path变量,当你最初运行gulp时,所有节点进程都已经实例化了,所以我们再次运行_initPaths()方法,以便它重新使用更新的node_path变量:
process.env.NODE_PATH = "..gulp/node_modules";
require("module").Module._initPaths();
注意:在第一个require方法之前,该过程覆盖 HAS 。
完成此操作后,您现在可以在指定的自定义node_path中要求gulp框架:
exports.framework = require('../gulp')(require('gulp'), paramsOrOptions);
在../gulp/
内,我们有index.js
:
module.exports = function(gulp, paramsOrOptions) {
// setup your gulp framework starting here.
}