有条件地丑化或连接 JavaScript 文件
Uglify or concat a JavaScript file conditionallly
我的脚本文件夹中有一个 "Lib" 文件夹和一个 "App" 文件夹。
Lib 文件夹包含第 3 部分库 JavaScript 个文件。其中一些在没有原始来源的情况下被缩小,其他我们有原始来源。
App 文件夹包含我们自己的所有 JavaScript 文件,所有这些文件都没有缩小。
我是 G运行t 的新手,但我有一个 g运行t 文件,它执行以下操作:
- Uglifies Lib 文件夹中的所有 JS 文件并生成带有源映射的缩小版本。
- Ugl化App文件夹中的所有JS文件并生成带有sourcemaps的缩小版本。
明显的问题:Lib 文件夹中的一些文件被缩小了,所以缩小它们 again/generating 源映射是一个坏主意,并且可能由于各种原因而失败。
我的解决方案:我运行 仅将 Lib 文件夹中的 .js 文件 Uglify 到 lib-unmin.min.js。然后我将所有已经缩小的文件连接到一个 lib-min.min.js 文件中,然后我将这两个文件连接在一起以获得 lib.min.js。
新问题
如果我不能在不中断的情况下将已经缩小的脚本连接到其他缩小脚本的末尾怎么办?
我有这样的依赖问题:
- scripts/lib/a.js(b 需要 运行)
- scripts/lib/b.min.js(c 到 运行 需要)
- scripts/lib/c.js(应用脚本需要运行)
如果我的 g运行tfile 中有这些文件路径的数组,按此顺序,将 uglifying/concating 所有文件按此顺序放入一个缩小的 JS 文件的最简单方法是什么,确保我们不尝试缩小缩小后的文件?
其他开发人员在类似情况下会怎么做?
谢谢!
我喜欢合并文件,然后将所有文件一起丑化。这样 uglify 就可以确保在压缩变量名称时没有重复的变量值相互覆盖。
您可以在 concats 中捆绑任意数量的文件。使不同的 concat 组一起丑化并保持 'first, second, third, ...' 顺序如下:
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
app: {
options: {
sourceMap: true,
sourceMapName: 'build/maps/map.map'
},
files: {
'build/app.min.js': ['build/js/app-first-unmin.js', 'build/js/app-second-min.js', 'build/js/app-third-unmin.js']
}
}
},
concat: {
options: {
separator: ';'
},
firstUnminified: {
src: [
'lib/underscore.js'
],
dest: 'build/js/app-first-unmin.js'
},
secondMinified: {
src: [
'lib/moment.min.js'
],
dest: 'build/js/app-second-min.js'
},
thirdUnminified: {
src: [
'lib/favico.js'
],
dest: 'build/js/app-third-unmin.js'
}
},
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.registerTask('default', ['concat:firstUnminified', 'concat:secondMinified', 'concat:thirdUnminified','uglify']);
};
我的脚本文件夹中有一个 "Lib" 文件夹和一个 "App" 文件夹。
Lib 文件夹包含第 3 部分库 JavaScript 个文件。其中一些在没有原始来源的情况下被缩小,其他我们有原始来源。
App 文件夹包含我们自己的所有 JavaScript 文件,所有这些文件都没有缩小。
我是 G运行t 的新手,但我有一个 g运行t 文件,它执行以下操作:
- Uglifies Lib 文件夹中的所有 JS 文件并生成带有源映射的缩小版本。
- Ugl化App文件夹中的所有JS文件并生成带有sourcemaps的缩小版本。
明显的问题:Lib 文件夹中的一些文件被缩小了,所以缩小它们 again/generating 源映射是一个坏主意,并且可能由于各种原因而失败。
我的解决方案:我运行 仅将 Lib 文件夹中的 .js 文件 Uglify 到 lib-unmin.min.js。然后我将所有已经缩小的文件连接到一个 lib-min.min.js 文件中,然后我将这两个文件连接在一起以获得 lib.min.js。
新问题 如果我不能在不中断的情况下将已经缩小的脚本连接到其他缩小脚本的末尾怎么办?
我有这样的依赖问题:
- scripts/lib/a.js(b 需要 运行)
- scripts/lib/b.min.js(c 到 运行 需要)
- scripts/lib/c.js(应用脚本需要运行)
如果我的 g运行tfile 中有这些文件路径的数组,按此顺序,将 uglifying/concating 所有文件按此顺序放入一个缩小的 JS 文件的最简单方法是什么,确保我们不尝试缩小缩小后的文件?
其他开发人员在类似情况下会怎么做?
谢谢!
我喜欢合并文件,然后将所有文件一起丑化。这样 uglify 就可以确保在压缩变量名称时没有重复的变量值相互覆盖。
您可以在 concats 中捆绑任意数量的文件。使不同的 concat 组一起丑化并保持 'first, second, third, ...' 顺序如下:
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
app: {
options: {
sourceMap: true,
sourceMapName: 'build/maps/map.map'
},
files: {
'build/app.min.js': ['build/js/app-first-unmin.js', 'build/js/app-second-min.js', 'build/js/app-third-unmin.js']
}
}
},
concat: {
options: {
separator: ';'
},
firstUnminified: {
src: [
'lib/underscore.js'
],
dest: 'build/js/app-first-unmin.js'
},
secondMinified: {
src: [
'lib/moment.min.js'
],
dest: 'build/js/app-second-min.js'
},
thirdUnminified: {
src: [
'lib/favico.js'
],
dest: 'build/js/app-third-unmin.js'
}
},
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.registerTask('default', ['concat:firstUnminified', 'concat:secondMinified', 'concat:thirdUnminified','uglify']);
};