实现 node_modules 共享

 

参考: https://segmentfault.com/a/1190000000610038

 

Gruntjs 作为前端工程化工具,能够很好的对前端资源进行管理(校验,合并,压缩)。

久之,发现一个问题

npm install

每次不同的项目都必须使用以上命令初始化,获取相对应的依赖模块,而这些模块往往都是相似。

那么,能否多个项目共用同个 node_modules ,做到一处管理,多处复用呢?

我们尝试一下:

我们事先初始化一个 node_modules 目录,包含 grunt 等众多精彩使用到的模块

接着,我们分析一下 grunt 模块下的 task.js 文件,可以找到两处任务加载的执行函数:

// Load tasks and handlers from a given directory. task.loadTasks = function(taskdir) {} // Load tasks and handlers from a given locally-installed Npm module (installed relative to the base dir). task.loadNpmTasks = function(name) {} 

从代码的注释可以获知

task.loadTasks 方法可以从指定的目录加载任务模块
task.loadNpmTasks 方法则根据当前项目下 Npm module 所在的安装目录来加载任务模块

至此,我们很快可以获得共享 node_modulse 的灵感,只要稍微改造一下 Gruntfile.js 文件,我们就可以实现之前的想法了。

// 引入 path 模块
var path = require('path');

module.exports = function(grunt) {

    // 重新设置 grunt 的项目路径,获取当前的 package.json 文件信息
    grunt.file.setBase(__dirname);

    // 获取当前目录相对于共享 node_modules 目录的路径(以windows下面为例)
    var nodepath = path.relative(__dirname,'D:/code/node_modules/') 

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        concat: "",
        uglify: "",
        clean : ""
    })

    // 加载任务
    grunt.task.loadTasks(path.join(nodepath,"grunt-contrib-clean",'tasks'));
    grunt.task.loadTasks(path.join(nodepath,"grunt-contrib-uglify",'tasks'));
    grunt.task.loadTasks(path.join(nodepath,"grunt-contrib-concat",'tasks'));

    // 注册任务
    grunt.registerTask('build', ['concat','uglify','clean']);
}

注意:

        项目目录和node_modules目录,需要在同一个目录下。

      d:/code/project

      d:/code/node_modules

转载于:https://www.cnblogs.com/lydialee/p/5842871.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值