当前位置 : 主页 > 网页制作 > Nodejs >

gruntjs – 如何在grunt的uglify横幅中包含文件名?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我正在使用grunt来缩小一些JS文件.将文件名包含在横幅中会很不错.我找到了几个如何在横幅中包含包名称的例子,但我还没有设法在那里获取文件名.那么:我需要在gruntfile(见下文)而不是
我正在使用grunt来缩小一些JS文件.将文件名包含在横幅中会很不错.我找到了几个如何在横幅中包含包名称的例子,但我还没有设法在那里获取文件名.那么:我需要在gruntfile(见下文)而不是pkg.name中添加源文件名(或dest文件名)?

提前致谢

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

网友评论