实现 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
实现 node_modules 共享的更多相关文章
- 删除顽固node_modules
在工作中有用到gulp,webpack,使用他们需用依赖node的一些模块包,于是会在目录下生成一个node_modules文件夹.有一次想删掉它重新生成模块包的时候发现根本不太可能,无穷无尽的报一个 ...
- git 学习(3) ----- 代码共享和多人协作
当我们开发项目的时候,项目会越来越大,就有可能需要其它同事进行参与,甚至进行开源,这时就需要找一个地方把代码存放起来,好供其它人下载并开发.这个地方,最好放到服务器上,因为只要能上网,就可以获取到, ...
- 让AngularJS的controllers之间共享数据
如何让controller之间共享数据呢?大致是让不同controller中的变量指向同一个实例. 通过service创建一个存放共享数据的对象. .service("greeting&qu ...
- vagrant虚拟机共享目录在windows宿主下的禁忌
问题背景 宿主环境:Windows10 开发环境:vagrant(ubuntu) 操作目录:synced_folder (共享目录 ) 执行命令:npm install 错误信息: npm ERR! ...
- VS Code项目中通过npm包的方式共享代码片段的方案实现
VS Code项目中通过npm包的方式共享代码片段的方案实现 上周在 "VS Code项目中共享自定义的代码片段方案" 的文章中提到过一个共享代码片段的方案,上周经过调研后并没有发 ...
- VS Code项目中共享自定义的代码片段方案
VS Code项目中共享自定义的代码片段方案 一.问题背景 项目中注释风格不统一,如何统一注释风格 一些第三方组件库名称太长,每次使用都需要找文档,然后复制粘贴 部分组件库有自己的Snippets插件 ...
- 使用mono-repo实现跨项目组件共享
本文会分享一个我在实际工作中遇到的案例,从最开始的需求分析到项目搭建,以及最后落地的架构的整个过程.最终实现的效果是使用mono-repo实现了跨项目的组件共享.在本文中你可以看到: 从接到需求到深入 ...
- 伪共享(false sharing),并发编程无声的性能杀手
在并发编程过程中,我们大部分的焦点都放在如何控制共享变量的访问控制上(代码层面),但是很少人会关注系统硬件及 JVM 底层相关的影响因素.前段时间学习了一个牛X的高性能异步处理框架 Disruptor ...
- nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...
随机推荐
- Life Forms (poj3294 后缀数组求 不小于k个字符串中的最长子串)
(累了,这题做了很久!) Life Forms Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8683 Accepted ...
- BZOJ-1192-[HNOI2006]鬼谷子的钱袋
Description 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一场拍卖会,其中有一 ...
- 我的第一个python web开发框架(4)——数据库结构设计与创建
小白做好前端html设计后,马上开始进入数据库结构设计步骤. 在开始之前,小白回忆了一下老大在公司里培训时讲过的数据库设计解说: 对于初学者来说,很多拿到原型时不知道怎么设计数据表结构,这是很正常的事 ...
- 在前端页面对easyui中的datagrid与jqgrid加载后的数据进行操作
因为项目的需求,需要在grid中加载数据后再在前端页面执行操作,所以在easyui中的grid与jqgrid都进行了测试和操作: eayui中grid数据的操作: //构造集合对象 var list ...
- HDU1142 A Walk Through the Forest(最短路+DAG)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- netfilter/iptables和firewalld的关系
1.netfilter 是linux 内核模块,其中包含了大量的内核规则,而要想对这些内核规则进行操作,就需要用户态的工具. iptables和firewalld就是一个用户态的工具. 2.iptab ...
- nodejs+express-实现文件上传下载管理的网站
Nodejs+Express-实现文件上传下载管理的网站 项目Github地址(对你有帮助记得给星哟):https://github.com/qcer/updo 后端:基于nodejs的express ...
- Admob - Google广告接入
前言 现在免费小游戏及应用的主要收入渠道就是通过接入广告.而Google的Admob适用于全球范围内的广告接入,文档方面及后台管理也是较为完善,接入还是比较便捷的. 不过Google目前还在墙外,虽然 ...
- 我的第一个python web开发框架(7)——本地部署前端访问服务器
PS:本系列内容进度节奏会放的很慢,每次知识点都尽量少一点,这样大家接触的知识点少了,会更容易理解,因为少即是多.另外,对于后面代码部分,虽然尽量不用那些复杂的封装和类,但它并不表示看了就能全部记住, ...
- SAP资产折旧,消息编号AA687:在上一年结算之后您只能记帐到新的一年
问题:公司****在2015年底没有固定资产,忽略了月结的必要步骤,在2016年1-5月份一直没有计提折旧,再进行折旧时提示"在上一年结算之后您只能记帐到新的一年" 原因: sap ...