gruntfile.js中如何正确使用数组变量
How to use array variable properly in gruntfile.js
尝试在 grunt 文件中使用预定义数组,认为使用 this.js_paths
会起作用,但似乎不起作用,因为我收到错误消息“无法读取 属性 IndexOf of undefined" 当试图丑化脚本时。我怎样才能 link js_paths
变量到文件 src
属性 正确而不是将数组复制到文件中。想在顶部单独定义它。这可能吗?
module.exports = function(grunt) {
// loadNpmTasks from package.json file for all devDependencies that start with grunt-
require("matchdep").filterDev("grunt-*", './package.json').forEach(grunt.loadNpmTasks);
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
js_paths: [
'inc/header1/js/*.js',
'!inc/header1/js/*.min.js',
'inc/header2/js/*.js',
'inc/header2/js/*.js',
'!inc/header2/js/*.min.js',
'js/*.js',
'!js/*.min.js'
],
uglify: {
options: {
mangle: true
},
build: {
files: [{
expand: true,
src: this.js_paths,
rename: function(dst, src) {
return src.replace('.js', '.min.js');
}
}]
}
},
watch: {
scripts: {
files: ['inc/header1/js/*.js', 'inc/header2/js/*.js', 'js/*.js'],
tasks: ['uglify'],
options: {
spawn: false,
}
}
}
});
grunt.registerTask('default', ['uglify', 'watch']);
};
最好在监视文件中使用相同的数组 js_paths
(因为那里需要它),是否有意义?对使用 gruntfile.js
还是有点陌生
利用Templates语法。它在文档中描述如下:
Templates
Templates specified using <% %>
delimiters will be automatically expanded when tasks read them from the config. Templates are expanded recursively until no more remain.
基本上,在您的 uglify
任务中将 this.js_paths
更改为 '<%= js_paths %>'
。
例如:
// ...
uglify: {
options: {
mangle: true
},
build: {
files: [{
expand: true,
src: '<%= js_paths %>', // <-----
rename: function(dst, src) {
return src.replace('.js', '.min.js');
}
}]
}
},
// ...
你的 watch
任务也是如此。
例如:
watch: {
scripts: {
files: '<%= js_paths %>', // <-----
tasks: ['uglify'],
options: {
spawn: false,
}
}
}
尝试在 grunt 文件中使用预定义数组,认为使用 this.js_paths
会起作用,但似乎不起作用,因为我收到错误消息“无法读取 属性 IndexOf of undefined" 当试图丑化脚本时。我怎样才能 link js_paths
变量到文件 src
属性 正确而不是将数组复制到文件中。想在顶部单独定义它。这可能吗?
module.exports = function(grunt) {
// loadNpmTasks from package.json file for all devDependencies that start with grunt-
require("matchdep").filterDev("grunt-*", './package.json').forEach(grunt.loadNpmTasks);
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
js_paths: [
'inc/header1/js/*.js',
'!inc/header1/js/*.min.js',
'inc/header2/js/*.js',
'inc/header2/js/*.js',
'!inc/header2/js/*.min.js',
'js/*.js',
'!js/*.min.js'
],
uglify: {
options: {
mangle: true
},
build: {
files: [{
expand: true,
src: this.js_paths,
rename: function(dst, src) {
return src.replace('.js', '.min.js');
}
}]
}
},
watch: {
scripts: {
files: ['inc/header1/js/*.js', 'inc/header2/js/*.js', 'js/*.js'],
tasks: ['uglify'],
options: {
spawn: false,
}
}
}
});
grunt.registerTask('default', ['uglify', 'watch']);
};
最好在监视文件中使用相同的数组 js_paths
(因为那里需要它),是否有意义?对使用 gruntfile.js
利用Templates语法。它在文档中描述如下:
Templates
Templates specified using
<% %>
delimiters will be automatically expanded when tasks read them from the config. Templates are expanded recursively until no more remain.
基本上,在您的 uglify
任务中将 this.js_paths
更改为 '<%= js_paths %>'
。
例如:
// ...
uglify: {
options: {
mangle: true
},
build: {
files: [{
expand: true,
src: '<%= js_paths %>', // <-----
rename: function(dst, src) {
return src.replace('.js', '.min.js');
}
}]
}
},
// ...
你的 watch
任务也是如此。
例如:
watch: {
scripts: {
files: '<%= js_paths %>', // <-----
tasks: ['uglify'],
options: {
spawn: false,
}
}
}