我有许多项目都遵循特定的文件夹结构和约定。
我不想复制整个项目,而是希望每个项目都有一个配置对象,并且每个项目都链接到全局框架。
我已经将每个项目的配置传递到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 文件夹?
最佳答案
您有两个选择:
Loading from global modules 。例如,在 Linux/Mac 上,您可以像这样设置
NODE_PATH
变量:export NODE_PATH="/path/to/gulp-framework/node_modules"
但并不真正推荐,因为这使得很难推断出模块的位置。您还必须在要构建项目的每台计算机上设置环境变量(尽管您可以为此编写一个 shell 脚本包装器)。
创建
gulp-framework
的project-a
和project-b
子目录。Node traverses all parent directories如果在当前目录中找不到模块,则查找
node_modules
文件夹,因此您的项目可以从gulp-frameworks
文件夹中“继承”模块。对于 Windows,从
gulpfile.js
中更新NODE_PATH
变量。下面更新了全局node_path变量,当您最初运行gulp时,所有 Node 进程都已经实例化,因此我们再次运行_initPaths()方法,以便它重新使用更新后的node_path变量:
process.env.NODE_PATH = "..gulp/node_modules"; require("module").Module._initPaths();
注意:进程重写HAS要包含在第一个 require 方法之前。
完成此操作后,您现在可以在指定的自定义 node_path 中要求 gulp 框架:
exports.framework = require('../gulp')(require('gulp'), paramsOrOptions);
在
../gulp/
里面我们有index.js
:module.exports = function(gulp, paramsOrOptions) { // setup your gulp framework starting here. }
关于node.js - 你能集中node_modules文件夹吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37335626/