Gruntjs 使用Grunt.JS缩小一些文件,合并所有文件
我将把一个开发团队从用于组合和缩小CSS/JS文件的VisualStudio插件Chirpy转移到grunt,作为工作流自动化过程的一部分 在chirpy中,配置如下所示(为简洁起见,被截断):Gruntjs 使用Grunt.JS缩小一些文件,合并所有文件,gruntjs,uglifyjs,Gruntjs,Uglifyjs,我将把一个开发团队从用于组合和缩小CSS/JS文件的VisualStudio插件Chirpy转移到grunt,作为工作流自动化过程的一部分 在chirpy中,配置如下所示(为简洁起见,被截断): ... 在这个节略的例子中,我有两个文件。一个需要缩小,另一个不需要。(据这里的人说,缩小forms.js会破坏功能,我还没有被分配时间来解决这个问题) 在grunt中,我需要在此列表中的一些文件上运行缩小任务,但不需要在其他文件上运行缩小任务。然后,我需要对所有文件(缩小或其他)运行concat任
...
在这个节略的例子中,我有两个文件。一个需要缩小,另一个不需要。(据这里的人说,缩小forms.js会破坏功能,我还没有被分配时间来解决这个问题)
在grunt
中,我需要在此列表中的一些文件上运行缩小任务,但不需要在其他文件上运行缩小任务。然后,我需要对所有文件(缩小或其他)运行concat
任务
考虑到uglifyJS需要一个dest
集来输出缩小的文件,我是否只需将其设置为类似temp.min.js
,并在我的concat任务中,使用此文件来构建我的脚本.combined.js
文件[由缩小和未缩小的文件组成],并使用grunt clean删除temp.min.js
文件
有更好的方法吗
[编辑以添加]
我还担心潜在的加载顺序冲突。当前工具配置为“合并所有这些文件”,每个文件上都有一个标志,指示是否应缩小。我不知道如何通过grunt复制这个工作流如果你有时间从Chirpy迁移到grunt,你肯定有时间尝试几个不同的迷你程序,并检查其中一个不会破坏你的
forms.js
模块
你所做的一切都很好,但我会支持用丑陋来处理一切。在我的例子中,我将所有脚本复制到一个构建文件夹中,然后在它们上运行uglify
我是这么丑的
uglify: {
js: {
files: { 'bin/public/js/all.js': 'bin/public/js/**/*.js' },
options: {
preserveComments: false
}
}
}
你可以,它可能会给你一些想法
当您在uglify
目标中定义文件时,只需明确说明顺序即可确定顺序
uglify: {
js: {
files: {
'bin/public/js/all.js': [
'bin/public/js/IMPORTANT/**/*.js',
'bin/public/js/something.js',
'bin/public/js/else.js',
'bin/public/js/unimportant/*.js',
// you can even exclude stuff
'bin/public/js/do-not-minify/**/*.js'
]
}
}
}
你可以查看更多信息
更新
在globbing模式中描述文件的顺序就是处理文件的顺序,这几乎适用于使用glob-in-Grunt的所有任务。如果你不能丑化所有的东西,我猜你还是会想要连接。在这种情况下,我建议您使用类似以下伪代码的流来启动:
uglify: {
js: {
files: { 'bin/public/js/all.js': [
// using whichever order of importance you need
'src/public/js/**/*.js',
'!the-ones-you-dont-minify'
]
}
},
concat: {
// using whichever order of importance you need
'src/the-ones-you-dont-minify/**/*.js',
'!the-ones-you-minified'
}
grunt.registerTask('build', ['clean', 'uglify:js', 'concat']);
module.exports = function (grunt) {
// 1. All configuration goes here
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
css: {
src: ['archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/css/*.css'],
dest: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/css/production.css'
},
js: {
src: ['archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/js/*.js'],
dest: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/js/production.js'
}
},
cssmin: {
css: {
src: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/css/production.css',
dest: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/css/min/production.min.css'
}
},
uglify: {
js: {
src: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/js/production.js',
dest: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/js/min/production.min.js'
}
},
watch: {
css: {
files: ['archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/css/*.css'],
tasks: ['concat:css', 'cssmin:css']
},
js: {
files: ['archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/js/*.js'],
tasks: ['concat:js', 'uglify:js']
}
}
});
// 2. Where we tell Grunt we plan to use this plug-in.
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
// 3. Where we tell Grunt what to do when we type "grunt" into the terminal.
grunt.registerTask('default', ['concat', 'cssmin', 'uglify']);
};
这是我的package.json文件
{
"name": "Grunt",
"version": "0.1.0",
"devDependencies": {
"grunt": "~0.4.5",
"grunt-contrib-concat": "^0.4.0",
"grunt-contrib-cssmin": "^0.10.0",
"grunt-contrib-uglify": "^0.5.0",
"grunt-contrib-watch": "*"
},
"dependencies": {
"grunt": "^0.4.5",
"grunt-ts": "^1.11.13"
}
}
评论你的第一段:问题不在于我的时间,而在于如果我影响forms.js,将要进行的全面回归测试(这是一个非常敏感的话题……forms.js对于一些关键功能来说是一个脆弱、臃肿的代码库。重构在我个人的优先级列表中非常高)…回到手头的问题。你刚才描述的会让我所有的文件都难看,不是吗?我需要缩小其中的一些,而不是全部。对于我的编辑,一个附加问题是文件的加载顺序很重要-一些缩小了,一些没有……所以我必须把我的怨恨任务包括在内,以缩小我需要缩小到临时文件的那些,这是我的编辑任务以适当的顺序对其进行处理(缩小和未缩小),然后grunt clean?好的,这就是我期望的过程。希望有一个更干净的方法。我想如果它开始变得不可维护,我可以将它们扔进它们自己的文件中。嗯,是的,更干净的方法不必将文件从缩小中排除。使用Angular之类的框架可以帮助你解开依赖关系树,是的在过去的几年里,我一直在MV*工作,先是主干,然后是角度。这在我的清单上……但这第一关需要引入尽可能少的认知开销。只需查看下面的教程,它将为您提供清晰的图片。
{
"name": "Grunt",
"version": "0.1.0",
"devDependencies": {
"grunt": "~0.4.5",
"grunt-contrib-concat": "^0.4.0",
"grunt-contrib-cssmin": "^0.10.0",
"grunt-contrib-uglify": "^0.5.0",
"grunt-contrib-watch": "*"
},
"dependencies": {
"grunt": "^0.4.5",
"grunt-ts": "^1.11.13"
}
}