node.js - 你能集中node_modules文件夹吗?

标签 node.js frameworks gulp environment-variables shared

我有许多项目都遵循特定的文件夹结构和约定。

我不想复制整个项目,而是希望每个项目都有一个配置对象,并且每个项目都链接到全局框架。

我已经将每个项目的配置传递到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 文件夹?

最佳答案

您有两个选择:

  1. Loading from global modules 。例如,在 Linux/Mac 上,您可以像这样设置 NODE_PATH 变量:

    export NODE_PATH="/path/to/gulp-framework/node_modules"
    

    但并不真正推荐,因为这使得很难推断出模块的位置。您还必须在要构建项目的每台计算机上设置环境变量(尽管您可以为此编写一个 shell 脚本包装器)。

  2. 创建 gulp-frameworkproject-aproject-b 子目录。

    Node traverses all parent directories如果在当前目录中找不到模块,则查找 node_modules 文件夹,因此您的项目可以从 gulp-frameworks 文件夹中“继承”模块。

  3. 对于 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/

相关文章:

node.js - Cheerio error, undefined not a function//这是正确的方法吗?

javascript - Node 的 C++ 附加组件,非阻塞?

ios - Baker Ebook Framework:如何将“book”文件夹正确打包为.hpub格式?

coldfusion - 使用 ColdFusion 框架

node.js - Socket.io 聊天应用程序在我发送消息时刷新

mysql - 我们可以在使用 sequelize js Node 在 mysql 表中插入数据后给时间吗

安卓开发框架

javascript - 尝试在 Windows 上使用 Gulp 和 Babel fork Node.js 进程

asp.net - 为什么 Visual Studio 在错误的文件夹中查找我的 gulpfile?

angularjs - 通过 gulp 启动 Protractor