gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:13:07 25 4
gpt4 key购买 nike

我正在使用 grunt 来缩小一些 JS 文件。在横幅中包含文件名会很好。我找到了几个如何在横幅中包含包名称的示例,但我还没有设法在其中获取文件名。所以:我必须在 gruntfile(见下文)而不是 pkg.name 中放入什么才能在那里获取源文件名(或目标文件名)?

提前致谢

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: {
options: {
banner: 'Filename: <% ugtargets[grunt.task.current.target].filename %>\n'
}
}
  • 对于源目录中的每个文件,我们从文件名中创建一个目标名称。确切的过程将取决于您的文件的命名方式;你会想要去掉任何点或斜线。这里我使用了正则表达式;在我的应用程序中,我实际使用了 fs从文件本身读取一些 JSDoc 数据。
  • 然后我们将该文件名存储在 Grunt 配置中的一个对象中,由目标名称索引。在这里,我使用了一个具有几个属性的对象;如果需要,您可以在此处添加更多内容或仅使用普通字符串。
  • 最后,我们将目标配置添加到 uglify 配置中。这只是 srcdest对于当前文件;我们必须做我们自己的文件名处理,但这没什么工作。然后我们使用新目标运行 uglify 任务。

  • 在横幅模板中,您现在可以使用 grunt.task.current.target获取我们之前存储在配置中的数据。快!

    关于gruntjs - 如何在 grunt 的 uglify 横幅中包含文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016372/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com