将项目中的node_modules集中到子项目中

2024-05-23

是否可以以在中心点上拥有所需模块的方式配置 grunt?

我有以下项目结构

-Project
-- subproject
-- subproject
-- subproject

我通过 grunt 构建项目的所有子项目,并且我也可以为自己构建每个子项目。 目前,我有一个 Gruntfile.js、package.json 和文件夹 node_modules (~50mb),其中包含每个子项目和根级别中的所有必需模块。

那么是否可以将 node_modules 文件夹仅放在一层上,例如在根级别上,子项目引用根级别上的node_modules?

-Project
--subproject
--subproject
--subproject
--node_modules

有没有办法通过 package.json 或其他方式引用 node_module 文件夹?

Edit:

Gruntfile.js(子项目级别)

/*global module:false */
/*jshint node:true */

module.exports = function(grunt) {

    "use strict";

    // ================================================================================
    // project configuration
    // ================================================================================
    grunt.initConfig({
        pkg : grunt.file.readJSON('package.json'),
        jshint: {
            globals : {
                d3:true,
                Modernizr:true,
                tempo:true
            },
            options: grunt.file.readJSON('.jshintrc')
        },
        csslint: {
            subproject: {
                src: 'css/**/*.css'
            }
        },
        htmllint : {
            subproject: {
                src: 'html/**/*.html'
            }
        },
        clean : [ 'output' ],
        less : {
            options: {
                paths: ['./']
            },
            src: {
                expand: true,
                cwd:    'css/',
                src:    ['**/*.less'],
                dest:   'css/',
                ext:    '.css'
            }
        },
        copy: {
            subproject: {
                files: [
                    {src: ['img/**', 'js/**', 'folderX/**','!**/*.less'], dest: 'output/subproject/'}
                ]
            }
        }
    });

    grunt.loadNpmTasks('grunt-contrib-clean');
    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-html');
    grunt.loadNpmTasks('grunt-css');
    grunt.loadNpmTasks('grunt-contrib-less');
    grunt.loadNpmTasks('grunt-contrib-copy');

    // ================================================================================
    // default task
    // ================================================================================
    grunt.registerTask('default', ['clean', 'less', 'csslint', 'htmllint', 'copy']);
};

package.json(子项目级别)

{
    "description": "subproject", 
    "title": "Lorem Ipsum", 
    "devDependencies": {
        "grunt-contrib-watch": "~0.2.0", 
        "grunt-contrib-jshint": "~0.1.1", 
        "grunt-contrib-less": "~0.5.0", 
        "grunt-contrib-uglify": "~0.1.1", 
        "grunt-contrib-copy": "~0.4.0", 
        "grunt-contrib-qunit": "~0.1.1", 
        "grunt-css": "~0.5.4", 
        "grunt-contrib-clean": "~0.4.0", 
        "grunt-html": "~0.3.3", 
        "grunt-contrib-concat": "~0.1.3"
    }
}

BR, 迈贝克斯


这是开箱即用的。npm寻找node_modules在当前目录及其所有父目录中,然后在全局位置中查找。

所以你甚至可以这样做:

-Project
--subproject1
---node_modules
--subproject2
--subproject3
--node_modules

subproject1将有权访问里面的所有 npmProject/subproject1/node_modules and Project/node_modules, while subproject2 and subproject3只会找到里面的那些Project/node_modules

Update

有一个很少有文档记录的功能,称为 grunt 集合。它需要一些设置,但您不需要每个子项目中所有 grunt 插件的副本。

这是文件布局

-Project
--subproject1
---node_modules
----grunt-collection
-----package.json
--subproject2
...
--subproject3
...
--node_modules
---grunt
---grunt-contrib-concat
---grunt-contrib-jshint
---grunt-contrib-qunit
---grunt-contrib-watch
---grunt-html
---grunt-contrib-clean
---grunt-contrib-copy
---grunt-contrib-less
---grunt-contrib-uglify
---grunt-css
--package.json

项目/package.json

{
    "description": "subproject", 
    "version": "0.0.0",
    "name": "Lorem",
    "title": "Lorem Ipsum", 
    "devDependencies": {
        "grunt": "*",
        "grunt-contrib-watch": "~0.2.0", 
        "grunt-contrib-jshint": "~0.1.1", 
        "grunt-contrib-less": "~0.5.0", 
        "grunt-contrib-uglify": "~0.1.1", 
        "grunt-contrib-copy": "~0.4.0", 
        "grunt-contrib-qunit": "~0.1.1", 
        "grunt-css": "~0.5.4", 
        "grunt-contrib-clean": "~0.4.0", 
        "grunt-html": "~0.3.3", 
        "grunt-contrib-concat": "~0.1.3"
    }
}

项目/subproject1/package.json

{
    "description": "subproject", 
    "version": "0.0.0",
    "name": "Lorem",
    "title": "Lorem Ipsum", 
    "devDependencies": {
    }
}

项目/subproject1/Gruntfile.js摘录(您只需要 grunt-collect 任务)。

grunt.loadNpmTasks('grunt-collection');
// grunt.loadNpmTasks('grunt-contrib-jshint');
// grunt.loadNpmTasks('grunt-html');
// grunt.loadNpmTasks('grunt-css');
// grunt.loadNpmTasks('grunt-contrib-less');
// grunt.loadNpmTasks('grunt-contrib-copy');

项目/subproject1/node_modules/grunt-collection/package.json

{
    "description": "subproject", 
    "version": "0.0.0",
    "name": "Lorem",
    "title": "Lorem Ipsum", 
    "dependencies": {
      "grunt-contrib-watch": "~0.2.0", 
      "grunt-contrib-jshint": "~0.1.1", 
      "grunt-contrib-less": "~0.5.0", 
      "grunt-contrib-uglify": "~0.1.1", 
      "grunt-contrib-copy": "~0.4.0", 
      "grunt-contrib-qunit": "~0.1.1", 
      "grunt-css": "~0.5.4", 
      "grunt-contrib-clean": "~0.4.0", 
      "grunt-html": "~0.3.3", 
      "grunt-contrib-concat": "~0.1.3"
    },
    "keywords": ["gruntcollection"]
}

关键是在每个子项目中创建一个只有 package.json 的小模块,其中包含keyword gruntcollection并包括您的 Grunfile 使用的依赖项。

然后 Grunt 将使用相同的策略加载它们require用途,这意味着它们可以在node_modules您的父项目的。

注意:grunt 集合的工作方式是使用 package.json 的依赖标记,这意味着您不能使用 npm install 来安装它,但您应该能够存储它的源代码控制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将项目中的node_modules集中到子项目中 的相关文章

  • findAndModify - MongoError:异常:必须指定删除或更新

    我想更新一个数组并返回文档 我的 findAndModify 语法正确吗 this becomeFollower function title username callback use strict posts findAndModify
  • AWS beanstalk Nodejs 多核

    我有一个问题 在文档中找不到 如果我使用 beanstalk 创建一个 Nodejs 应用程序并使用多核机器 beanstalk 会利用所有这些核心吗 由于nodejs是单线程应用程序 beanstalk会为每个cpu创建一个新的nodej
  • 为什么有时 npm install 在 mac 上不起作用?

    我在运行命令时创建了nodejs项目npm 安装它因一些错误而失败 同一个项目正在进行中ubuntu系统但是当我克隆这个代码时mac系统并尝试运行 npm install 它失败并出现一些错误 我认为 scrypt 模块有问题 但我不知道确
  • 在 Node.js 中查找默认网关 IP 的最佳方法是什么?

    如今在 Node js 中查找默认网关 IP 地址的最佳方法是什么 os networkInterfaces 不提供此信息 想到的唯一想法是解析stdout子流程的route n Kernel IP routing table Destin
  • 在nodejs中解密.Net cookie

    我在 Net 中创建了一个加密的cookie 并尝试在nodejs 中解密它的内容 但是nodejs不断抛出异常 TypeError DecipherFinal失败 在 Net中 我使用带有密钥的AES加密方法 932D86BB1448EE
  • IE 中未定义“代理”

    我通过 React Node 构建了一个 Excel 插件Umi https umijs org 我们已经实施了我们的身份验证系统 身份验证在 Chrome 和 Safari 中有效 我刚刚意识到它在 IE11 中不能很好地工作 F12表明
  • pine、node.js (express) 和 Access-Control-Allow-Origin

    我正在本地电脑上开发一个应用程序 前端应该使用 spinjs 构建 后端 api 使用 node js 构建 Spine 运行在端口 9294 上 node js 运行在端口 3000 上 在 Spine 中 我在模型中添加了以下内容 ur
  • 在 Azure 上运行节点应用程序时出错

    我们正在尝试在azure上运行节点应用程序 它已成功部署 但当我们尝试运行该应用程序时 我们在跟踪日志中收到以下错误 ActivityId A5FF0B34 7C3F 4A99 9497 6C04A9AE9A9F 消息 在进程终止之前 ii
  • nodejs knox 放入 s3 结果是 403

    我尝试在 nodejs 项目中使用 knox 上传到 Amazon s3 存储桶 但无法解决 403 错误 我已确保密钥 秘密和存储桶已正确设置 我真的需要那些有更多经验的人的帮助 我的节点代码如下 var upload test func
  • 动态数据 Express.JS 的缓存控制

    如何建立一个缓存控制政策在快递 js关于 JSON 响应 我的 JSON 响应根本没有改变 所以我想积极缓存它 我找到了如何对静态文件进行缓存 但找不到如何对动态数据进行缓存 不优雅的方法是简单地添加一个调用res set 在任何 JSON
  • Node.Js - 获取 Windows 用户名

    我正在尝试获取运行我的node jS应用程序的计算机的Windows用户名 该应用程序始终在Windows计算机上运行 如何使用 Node Js 获取当前的 Windows 用户名 我想找到类似的东西WindowsIdentity GetC
  • 无法使用 Tedious 和 Node JS 连接到本地 SQL Server 数据库

    我正在尝试连接到本地计算机上的 SQL Server 我正在尝试使用乏味和乏味 ntlm 两者的配置如下 var tds require tedious ntlm var tds require tedious var config use
  • 在 Nestjs 的我的模块中导入另一个模块的存储库

    我正在尝试使用 Nestjs 构建一个应用程序 目前我有两个模块 用户和身份验证 其结构如下 我需要注射用户服务 into 认证服务为了与User实体 所以首先我注入了用户存储库 into 用户服务并导出服务 用户 模块 ts import
  • 通过套接字的身份验证方法

    我正在尝试通过套接字进行身份验证sailsjs and passport 挑战似乎在于套接字连接没有会话 并且 sailsjs 模拟请求对象 导致它没有 Passport 中间件设置 这导致nodejs抛出一个错误 说req对象没有调用的方
  • 解析函数是否异步传递给 Promise 执行器?

    我有以下代码 function myPromiseFunc return new Promise resolve gt resolve Promise resolve 123 据我们所知Promise resolve方法立即用普通值解析 P
  • Mac OS X Yosemite 中的 Node.js dtrace 错误

    我在 Mac OS X 10 10 Yosemite 上尝试使用 DTrace Node js 应用程序 sudo dtrace n profile 97 execname node arg1 jstack 150 8000 count t
  • 在 React 应用程序中简单连接到 mongodb

    我使用 create react app 创建了简单的反应应用程序 这个应用程序包含表单 验证和引导程序 没有什么花哨的东西能像魅力一样发挥作用 我还注册了 mongo 以获得免费集群 以便我可以发送一些数据 所以我有这个网址 mongod
  • Passport-local-mongoose:createStrategy 不是函数/authenticate 不是函数

    我正在构建这个启动项目 https github com cj wang mean start tree 424e6056e33bb16874ae808daf3780d53309296f并尝试添加用户登录护照本地猫鼬 https www n
  • 获取请求的客户端 IP 地址而不是 Cloudflare 的 IP 地址

    Cloudflare 会更改传入请求的 IP 地址 因为 Cloudflare 是我的网站和互联网之间的中间件 代理 我该怎么办获取请求的初始IP地址 而不是 Cloudflare 的 IP 地址 我听说过mod cloudflare但是这
  • 使用 IP 地址连接到另一台计算机

    我在计算机上安装了 NodeJS 并运行了一些测试 一切正常my机器 现在我想要一个不在同一网络中的朋友连接到我的计算机 以便 NodeJS 可以响应我朋友的请求 但我不知道 我必须在哪个IP和端口上监听 我也不知道 我必须给我的朋友哪个I

随机推荐