我使用grunt-contrib-concat将所有自定义JS文件连接在一起,并用IIFE包装它们。我遇到了一些加载顺序问题(即我的init文件在某些模块之前执行,导致未定义的错误)。我想在concat命令中指定init.js
应该是最后的,但我也不想指定所有其他JS文件的顺序,只是这个特定的文件最后一次。
这是我的concat的当前配置:
/**
* Set project info
*/
project: {
src: 'src',
app: 'app',
assets: '<%= project.app %>/assets',
css: [
'<%= project.src %>/scss/style.scss'
],
js: [
'<%= project.src %>/js/*.js'
]
},
concat: {
dev: {
files: {
'<%= project.assets %>/js/scripts.min.js': '<%= project.js %>'
}
},
options: {
stripBanners: true,
nonull: true,
banner: ';(function($, window, document, undefined){ \n "use strict";',
footer: '}(jQuery, window, document));'
}
},
如何指定要连接的最后一个文件而不向我的项目添加额外的grunt模块?
答案 0 :(得分:1)
您可以通过连接所有文件但 init.js
,然后使用维护顺序的数组语法将结果与init.js
连接来实现:
concat: {
dev1: {
dest: '<tmp>/concat1.js',
src: ['<all your js>', '!init.js']
},
devFinal: {
options: {
stripBanners: true,
nonull: true,
banner: ';(function($, window, document, undefined){ \n "use strict";',
footer: '}(jQuery, window, document));'
},
files: {
dest: 'scripts.min.js',
src: ['<tmp>/concat1.js', 'init.js']
},
},
}
然后连续调用两个目标:
grunt.registerTask('myConcat', ['concat:dev1', 'concat:devFinal']);