最近有一个项目使用了<代码> requirejs> 代码来解决前端的模块化,但是随着页面和模块的越来越多,我发现我快要持有不住这些可爱的js文件了,具体表现在每个页面都要设置一堆<代码> requirejs> 代码的配置(<代码> baseUrl 代码>,<代码>路径> 代码之类的)。
不知谁说过,一些事重复做了三次,就该考虑一下自动化了,于是我小心翼翼的掏出了我的<代码>繁重代码>。
我们得使用<代码> grunt-contrib-requirejs 代码>这个插件来实现如上所说的自动化功能,这个就是根据<代码> r。js代码>封装的<代码>繁重> 代码插件。
安装<代码> grunt-contrib-requirejs 代码>
npm我——save-dev grunt-contrib-requirejs
配置<代码> Grantfile 代码>
首先我们来看下项目目录
<代码> src> 代码是每个页面的依赖文件
<代码>模块/代码>和<代码>自由> 代码是一些模块和库
<代码> dist> 代码是合并压缩后的文件
在<代码> Gruntfile> 代码中首先得到需要处理的文件列表,并创建一个空对象,用来装requirejs的配置
var=grunt.file.expand文件(“静态/js/src/* . js”); var requireOptions={};
然后遍历这个文件列表数组,得到js文件的名称:
文件。forEach(函数(文件){ var filenamelist=file.split (“/?; var num=filenamelist.length; var文件名=filenamelist [num - 1] .replace (/\ . js/美元,”); }
接下来为每个js文件配置一个任务,任务名称就是js的文件名称:
文件。forEach(函数(文件){ requireOptions(文件名)={ 选择:{ baseUrl:“静态/js ', 道路:{ jquery:“lib/jquery.min”, lrz:“lib/lrz.all.bundle”, zepto:“lib/zepto.min”, ajax:“模块/ajax”, 验证器:“模块/验证器”, 页面:“模块/混合/to_page”, 对话框:“模块/混合/toggle_login_dialog”, }, optimizeAllPluginResources:没错, 名称:' src/' +文件名, :“静态/js/dist/?文件名+ . js” } }; } >之前接着初始化哼哈<代码> 代码>配置并加载并注册任务
grunt.initConfig ({ requirejs: requireOptions }) grunt.loadNpmTasks (“grunt-contrib-requirejs”); 咕哝。registerTask(“需要”,[' requirejs ']); >之前到这里<代码> requirejs> 代码的配置部分就结束了,在命令行输入<代码>繁重要求> 代码就会看到静态/js/dist <代码> 代码>目录下面有东西蹦出来了,而且全部都是合并后并压缩好的。
在html页面中只需要:
& lt;脚本src=" https://www.yisu.com/zixun/static/js/require.js "祝辞& lt;/script> & lt;脚本src=" https://www.yisu.com/zixun/static/js/dist/index.js "祝辞& lt;/script>就能成功加载了。
<>强增加js文件的版本号强>
浏览器有时会对加载过的js或css进行缓存,如果你的某些js依赖发生改变,那么就可能发生错误,解决办法是在文件后面增加查询字符串,例如<代码> a.js& # 63; v=dsd712sd 代码>
那么如何控制版本,首先我们肯定想到用<代码>新日期()> 代码,但是如果每次发布都让浏览器重新加载(尽管有些文件根本就没有改变),难免会造成浪费。正确的方案是根据文件内容生成MD5值来作为版本号,这样当文件没有改变时,哈希就不会变。
那么如何自动解决版本号的问题,我们可以用到<代码> asset-cache-control 代码>这个打杂的插件
首先安装:
npm我——save-dev asset-cache-control<代码> asset-cache-control> 代码的用法个很简单,只要设置一个源文件,再设置html文件的路径就可以了
grunt.initConfig ({ 缓存:{ 演示:{ assetUrl:“js/demo.js ', tmp(“替换”): } } })注意的是:html文件中需要引入<代码> js/demo.js
详解使用繁重完成requirejs的合并压缩和js文件的版本控制