我正在使用grunt来缩小一些JS文件.将文件名包含在横幅中会很不错.我找到了几个如何在横幅中包含包名称的例子,但我还没有设法在那里获取文件名.那么:我需要在gruntfile(见下文)而不是
提前致谢
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
files: [{
expand: true,
src: '**/*.js',
dest: 'build',
cwd: 'src',
ext: '.min.js'
}]
}
}
});
// Load the plugin that provides the "uglify" task.
grunt.loadNpmTasks('grunt-contrib-uglify');
// Default task(s).
grunt.registerTask('default', ['uglify']);
};
我尝试做同样的事情,并且找不到对模板公开的当前文件名的任何引用.这是我最终想出的解决方法;这是一个为每个文件动态创建新目标的自定义任务:
grunt.registerMultiTask('minify', function () {
this.files.forEach(function (file) {
var path = file.src[0],
target = path.match(/src\/(.*)\.js/)[1];
// store some information about this file in config
grunt.config('ugtargets.' + target, {
path: path,
filename: path.split('/').pop()
});
// create and run an uglify target for this file
grunt.config('uglify.' + target + '.files', [{
src: [path],
dest: path.replace(/^src\/(.*)\.js$/, 'build/$1.min.js')
}]);
grunt.task.run('uglify:' + target);
});
});
我的uglify配置:
uglify: {
options: {
banner: 'Filename: <% ugtargets[grunt.task.current.target].filename %>\n'
}
}
>对于源目录中的每个文件,我们从文件名中创建目标名称.具体过程取决于文件的命名方式;你会想要去除任何点或斜线.在这里我用了一个正则表达式;在我的应用程序中,我实际上使用fs从文件本身读取一些JSDoc数据.
>然后我们将该文件名存储在Grunt配置中的对象中,并由目标名称索引.在这里,我使用了一个具有几个属性的对象;你可以在这里添加更多的东西,或者只是使用一个普通的字符串.
>最后,我们将目标配置添加到uglify配置中.这只是当前文件的src和dest;我们必须做自己的文件名处理,但它没有多少工作.然后我们用新目标运行uglify任务.
在横幅模板中,您现在可以使用grunt.task.current.target来获取我们之前存储在配置中的数据.普雷斯托!
