尝试使用grunt-contrib-uglify时出错:" src文件为空"

时间:2015-07-19 16:32:29

标签: javascript gruntjs grunt-contrib-uglify

我有以下Gruntfile.js

module.exports = function(grunt) {
  var config = {
    pkg: grunt.file.readJSON('package.json'),

    /* Some other tasks... */

    uglify: {
      options: {
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
      },
      def: {
        files: {
          'out/src.js': 'out/src.min.js'
        }
      }
    }
  };

  grunt.initConfig(config);
  grunt.loadNpmTasks('grunt-contrib-uglify');

  grunt.registerTask('default', [/* <other-tasks>, */ 'uglify:def']);
};

文件夹结构如下:

project
  |
  +-out (folder)
  +-Gruntfile.js

重要提示:我从grunt文件夹运行project

运行grunt时,uglify:def之前有一项任务负责生成src.js project/out

当我运行grunt时,我可以看到src.js生成project/out,但当Grunt运行uglisy:def时,我收到以下错误:

  

跑步&#34; uglify:def&#34; (uglify)任务。

     

目的地out / src.js未写入,因为src文件为空。

     

没有创建文件。

我做错了什么?

日志

--verbose一起运行时,我得到:

Running "uglify:def" (uglify) task
Verifying property uglify.def exists in config...OK
Files: [no src] -> out/src.js
Options: banner="/*! My Pack 2015-07-19 */\r\n", footer="", compress={"warnings":false}, mangle={}, beautify=false, report="
min", expression=false, maxLineLen=32000, ASCIIOnly=false, screwIE8=false, quoteStyle=0
>> Destination out/src.js not written because src files were empty.
>> No files created.

3 个答案:

答案 0 :(得分:5)

我有如下配置,对我来说效果很好。

    // uglify javascript
    uglify: {
        dev: {
            options: {
                mangle: true
            },
            files: {
                'js/dest.min.js': 'js/source.js'
            }
        }
    },

可能您将目的地与来源混淆了。尝试切换它们。

答案 1 :(得分:0)

发生这种情况的原因是,您没有在给定的任务上进行注册。

好的,让我们开始串联:

concat: {
    css: {
        src: ['./assets/css/*.css', './assets/css/**/*.css'],
        dest: './dist/css/style.css'
    },
    js: {
        src: ['./assets/js/*.js', './assets/js/**/*.js'],
        dest: './dist/js/script.js'
    }
},

因此,此concat应该从给定的css上方收集所有url / directories个文件,并在一个位置连接到给定的目的地,依此类推,js

这将简单地将style.cssscript.js连接到dest目标目录。

,但是直到您没有在下面的行中注册此concat任务,该命令才起作用:

grunt.registerTask('default', ['concat', 'cssmin', 'uglify']);

因此,直到concat不会串联dest目录中的那些文件,uglify才会如何收集和工作!

结论:只有在grunt.registerTask函数中没有提及任务的情况下,任务才能执行。

答案 2 :(得分:0)

我的问题是我的源文件的路径不正确。因此,该文件不是“空”,而是找不到它。