您可以集中 node_modules 文件夹吗?
Can you centralize the node_modules folder?
我有很多项目都遵循特定的文件夹结构和约定。
我不想复制整个项目,而是希望每个项目都有一个配置对象,并且每个项目都链接到全局框架。
我已经将每个项目的配置传递到 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
然而这显然returns
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
子目录。
如果在当前目录中找不到模块,节点 traverses all parent directories 正在寻找 node_modules
文件夹,因此您的项目可以从 gulp-frameworks
文件夹。
对于 Windows,更新 gulpfile.js
.
中的 NODE_PATH
变量
下面更新全局node_path变量,当你最初运行 gulp时,所有节点进程都已经实例化,所以我们运行 _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.
}
我有很多项目都遵循特定的文件夹结构和约定。
我不想复制整个项目,而是希望每个项目都有一个配置对象,并且每个项目都链接到全局框架。
我已经将每个项目的配置传递到 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
然而这显然returns
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
子目录。节点 traverses all parent directories 正在寻找
node_modules
文件夹,因此您的项目可以从gulp-frameworks
文件夹。对于 Windows,更新
中的gulpfile.js
.NODE_PATH
变量下面更新全局node_path变量,当你最初运行 gulp时,所有节点进程都已经实例化,所以我们运行 _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. }