实现 node_modules 共享

发布时间:2019-06-24 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了实现 node_modules 共享脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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

久之,发现一个问题

npm install

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

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

我们尝试一下:

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

实现 node_modules 共享

接着,我们分析一下 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:/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']);
}

Made it!! 如获至宝,马上命令行执行 grunt build。 吶呢,出错啦:

Fatal error: Unable to find local grunt.

出错的原因也比较简单,我们把 grunt 的目录给忽略了,因此在必须在执行命令的时候告诉 grunt 目录的位置,加上 --base 参数,就能成功运行了。

grunt build --base = d:node_modules

因为我们这里人为的加上 --base 参数,改变了当前项目下 grunt 目录地址,在运行任务的时候,需要重新设置回去,这也解释了为什么需要在 Gruntfile.js 加上以下代码:

grunt.file.setBase(__dirname);

PS: 以上为 windows 下的实现方法,最好把共享的 node_modules 和项目放置在同一分区,不然会出现文件路径不兼容的问题,Unix 和 linux 没有分区的概念,所以没有问题,其他的设置都一样。

The End, Enjoy it!

脚本宝典总结

以上是脚本宝典为你收集整理的实现 node_modules 共享全部内容,希望文章能够帮你解决实现 node_modules 共享所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: