Gruntjs 如何在grunt中的丑陋横幅中包含文件名?

Gruntjs 如何在grunt中的丑陋横幅中包含文件名?,gruntjs,Gruntjs,我正在使用grunt缩小一些JS文件。最好在横幅中包含文件名。我已经找到了几个例子来说明如何在横幅中包含包名,但是我还没有在其中找到文件名。那么:我必须在Grunfile(见下文)中放入什么来代替pkg.name来获取其中的源文件名(或dest文件名) 提前谢谢 module.exports = function(grunt) { // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON(

我正在使用grunt缩小一些JS文件。最好在横幅中包含文件名。我已经找到了几个例子来说明如何在横幅中包含包名,但是我还没有在其中找到文件名。那么:我必须在Grunfile(见下文)中放入什么来代替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']);
};
module.exports=函数(grunt){
//项目配置。
grunt.initConfig({
pkg:grunt.file.readJSON('package.json'),
丑陋的:{
选项:{
横幅:'/*!*/\n'
},
建造:{
档案:[{
是的,
src:“***.js”,
目标:“构建”,
cwd:‘src’,
分机:'.min.js'
}]
}
}
});
//加载提供“丑”任务的插件。
grunt.loadNpmTasks(“grunt-contrib-uglify”);
//默认任务。
registerTask('default',['uglify']);
};

文档确实是令人震惊的,但是横幅字符串中的
意味着您也可以执行
\ngrunt.
甚至
\n此操作。

因此(经过一些搜索后)要获取文件名,可以执行以下操作:

var bannerTemplate=''
+'/*! '
+“\n*版本:”
+“\n*作者:”

+“\n*/\n”

我尝试做同样的事情,但找不到对模板公开的当前文件名的任何引用。这是我最终找到的解决办法;这是一项自定义任务,可为每个文件动态创建新目标:

grunt.registerMultiTask('minify',function(){
this.files.forEach(函数(文件){
var path=file.src[0],
target=path.match(/src\/(.*)\.js/)[1];
//在配置中存储有关此文件的一些信息
grunt.config('ugtargets.'+target{
路径:路径,
文件名:path.split('/').pop()
});
//创建并运行此文件的丑陋目标
grunt.config('uglify.+target+'.files'[{
src:[路径],
dest:path.replace(/^src\/(.*)\.js$/,“build/$1.min.js”)
}]);
grunt.task.run('uglify:'+target);
});
});
还有我丑陋的外形:

uglify:{
选项:{
标题:“文件名:\n”
}
}
  • 对于源目录中的每个文件,我们从文件名中创建一个目标名称。具体过程将取决于文件的命名方式;你会想要去掉任何点或斜线。这里我用了正则表达式;在我的应用程序中,我实际上使用了
    fs
    从文件本身读取一些JSDoc数据
  • 然后我们将该文件名存储在Grunt配置中的一个对象中,由目标名称索引。在这里,我使用了一个具有几个属性的对象;您可以在这里添加更多内容,或者如果需要,只使用普通字符串
  • 最后,我们将目标配置添加到uglify配置中。这只是当前文件的
    src
    dest
    ;我们必须自己处理文件名,但工作量不大。然后我们用新目标运行丑陋任务

在横幅模板中,您现在可以使用
grunt.task.current.target
获取我们先前存储在配置中的数据。普雷斯托

如果需要编写更多的脚本,可以方便地使用自定义属性作为名称标识符将其分离到特定的子任务中

    uglify: {
        options: {
            banner: 
            '<% var subtask = uglify[grunt.task.current.target]; %>' +
            '/* <%= subtask.name %> <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' +
            ' */\n'
        },
        main: {
            name: 'main.min.js',
            files: [{
                src: 'build/files/js/main.min.js',
                dest: 'build/files/js/main.min.js'
            }]
        },
        vendor: {
            name: 'vendor.min.js',
            files: [{
                src: 'build/files/js/vendor.min.js',
                dest: 'build/files/js/vendor.min.js'
            }]
        }
    }
uglify:{
选项:{
横幅:
'' +
“/*()\n”+
“*/\n”
},
主要内容:{
名称:“main.min.js”,
档案:[{
src:'build/files/js/main.min.js',
dest:'build/files/js/main.min.js'
}]
},
供应商:{
名称:“vendor.min.js”,
档案:[{
src:'build/files/js/vendor.min.js',
dest:'build/files/js/vendor.min.js'
}]
}
}
尝试以下操作:

banner: grunt.file.read('./folder/file.js'),

进程:函数(src,filepath){}完成了任务

对我来说,我想在每个uglified.min.js的底部添加“/#sourceUrl=xxx.min.js”,这样我就可以调试这些动态加载的.min.js了。以下简单的Gruntfile.js适合我:

module.exports = function (grunt) {
    var cwd = "/Branding/Layouts/JS/";
    var src = [
                "file1.js",
                "file2.js",
                "file3.js"
    ];

    var minified_src = [];
    for (i=0;  i< src.length; i++)
        minified_src.push(src[i].replace(/\.js$/g, ".min.js"));

    var config = grunt.initConfig({
        "uglify": {
            options: {
                sourceMap: true
            },
            target: {
                files: [
                    {
                        expand: true,
                        cwd: cwd,
                        src: src,
                        dest: cwd,
                        ext: ".min.js",
                        extDot: "last"
                    }
                ]
            }
        },
        concat: {
            options: {
                process: function (src, filepath) {
                    return src + "\n//# sourceURL=" + filepath.split("/").slice(-1);
                }
            },
            target: {
                files: [
                    {
                        expand: true,
                        cwd: cwd,
                        src: minified_src,
                        dest: cwd
                    }
                ]
            }
        }
    });

    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.registerTask('default', ['uglify', 'concat']);
};
module.exports=函数(grunt){
var cwd=“/Branding/Layouts/JS/”;
var src=[
“file1.js”,
“file2.js”,
“file3.js”
];
var最小化_src=[];
对于(i=0;i
注意:uglify无法保留不在代码块内的注释(如/#sourceMap=xxx.js),我必须在uglify完成后使用concat追加注释<