我正在使用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来获取我们之前存储在配置中的数据.普雷斯托!