在使用grunt进行压缩js时候,如何处理文件里名称面有多个点号?

请注意,这个可能是grunt的bug,不过可以自己直接用rename来自定义js文件的名称。


(ext不能出现,因为ext优先级高于rename,然后传进去的src是已经处理好用ext处理好的名称,只会有一个点号的。)


例如:

我们要压缩p.fortest.js:

用的gruntfile.js内容:


但是压缩出来的结果与我们的想象有很多出入:





国外的答案:


rite
2
I'm uglifying files with one to one mapping like this:

    plugins: {
        files: [{
            expand: true,
            src: '*.js',
            cwd: 'Scripts/v1/Plugins',
            dest: 'Scripts/v1/Build/Plugins',
            ext: '.min.js'
        }]
    },
And this works fine, until i start naming my files with multiple dots in filename. So above script will uglify 
4 files:
plugins.a.js
plugins.b.js
plugins.c.js
plugins.d.js

into one file:

plugins.min.js

while I expect:

plugins.a.min.js
plugins.b.min.js
plugins.c.min.js
plugins.d.min.js

Is this expected behavior or bug? In any case how can I keep one to one mapping with my naming convention.

task gruntjs minification
share|improve this question
asked May 17 '13 at 10:31

Sergej Popov
95911227
add a comment | 
2 Answers

active oldest votes
up vote 4 down vote accepted
It is currently the default expected behavior.

This has been brought up a few times with grunt:

https://github.com/gruntjs/grunt-contrib-uglify/issues/54
extension is after last period only
From the first link, a change has been submitted to node globule that will let you select either first or last dot.

Other than that (or until that lands) you could use a rename function to get the behavior you need.

share|improve this answer
answered May 18 '13 at 4:48

dc5
6,4612524
add a comment | 
up vote 2 down vote
Did you manage to find a solution for this? I checked all the issues in their github and apparently it should be fixed, but I'm still getting the same behavior with the latest builds.

EDIT: A solution was to pass a rename function and manually create the filename

files: {
            src: 'src/hp-lp-<%= pkg.version %>.js',
            dest: 'src/',
            expand: true,
            flatten: true,
            rename: function (dest, src) {
                var folder = src.substring(0, src.lastIndexOf('/'));
                var filename = src.substring(src.lastIndexOf('/'), src.length);

                filename = filename.substring(0, filename.lastIndexOf('.'));

                return dest + folder + filename + '.min.js';
            }
        }


ok,我们修改一下gruntfile.js如下:

module.exports = function (grunt) {
    //var fs = require('fs');
    //var localPath = fs.realpathSync('.');


    // 项目配置
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        uglify: {
            options: {
                banner: '/*! <%= pkg.file %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
            },
            /*
            build: {
                src: 'public/module/p.fortest.js',
                dest: 'public/module/p.fortest.min.js'
            } */
            minjs: { //最小化、混淆所有 js/ 目录下的 JavaScript 文件
                files: [{
                    expand: true,
                    cwd: 'public/module/',
                    src: ['*.js', '!*.min.js'],
                    dest: 'public/module/'
                    //,ext: '.min.js'
                    ,rename: function (dest, src) {
                        var folder = src.substring(0, src.lastIndexOf('/'));
                       var filename = src.substring(src.lastIndexOf('/'), src.length);
                      //  var filename=src;
                        filename = filename.substring(0, filename.lastIndexOf('.'));

                        return dest + folder + filename + '.min.js';
                        //return  filename + '.min.js';
                    }
                }]
            }
        }
    });
    // 加载提供"uglify"任务的插件
    grunt.loadNpmTasks('grunt-contrib-uglify');
    // 默认任务
    grunt.registerTask('default', ['uglify']);

}


下面是运行结果:


符合要求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值