我有一个如下所示的目录:
/文件夹/b.js
/文件夹/jQuery.js
/文件夹/a.js
/文件夹/sub/c.js
我想将所有这些js文件缩小到一个js文件中in order:
jQuery.js -> a.js -> b.js -> c.js
Q:
1.如何通过grunt-contrib-uglify实现?(事实上,文件很多,单独指定所有源文件路径是不切实际的)
2.btw,如何在调试时获得未缩小的文件,并在发布时获得缩小的单个文件并且无需更改脚本标签在html中(以及如何编写脚本标签)?
好问题!
1) Uglify 将重新排序目标文件中的函数,使函数定义位于顶部,函数执行位于底部,但它seems它将保留函数执行的顺序。
这意味着如果您确保在 Gruntfile 的 Uglify 配置中首先提到 jQuery,则 jQuery 运行来定义其全局函数的函数将被放在第一位。
我使用这个配置:
uglify: {
options: {
sourceMap: true
},
build: {
files: {
'public/all.min.js': ['public/js/vendor/jquery-1.10.2.min.js', 'public/js/*.js'],
}
}
}
2)我认为没有一种明确的方法可以实现这一目标。这取决于什么 Web 框架、模板框架以及您有什么样的要求。我使用express+jade,在我的主要jade布局中我有:
if process.env.NODE_ENV === 'production'
script(src='/all.min.js')
else
script(src='/js/vendor/jquery-1.10.2.min.js')
script(src='/js/someScript.js')
script(src='/js/otherScript.js')
在我的 package.json 中,我有:
"scripts": {
"postinstall": "grunt"
},
这意味着当我跑步时npm install
在部署时(在 Heroku 上)运行 grunt 来缩小/连接文件,并且当应用程序启动时NODE_ENV=production
使用缩小的客户端 JavaScript。在本地,我得到了原始的客户端 JavaScript,以便于调试。
两个缺点是:
- 我必须保持两个脚本文件列表同步(在 Gruntfile 和 layout.js 中)我通过使用解决这个问题
*.js
在 Gruntfile 中,但这可能不适合所有人。您可以将 javascript 列表放入 Gruntfile 中,并从中创建一个玉模板,但这对于大多数项目来说似乎有点过分了。
- 如果你不信任你的 Grunt 配置,你基本上必须使用以下命令来测试运行应用程序
NODE_ENV=production
在本地验证缩小是否按照您的预期方式工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)