如果使用通配符选择器,uglify是否会包含两次文件

时间:2017-12-22 22:38:38

标签: javascript gruntjs uglifyjs

鉴于我的咕噜声uglify设置如下;文件manager.js会在结果文件foo.js中被包含两次吗?或者uglify足够智能,以确定不包括manager.js两次?

...
uglify: {  
    options: {  
        compress: true,
    },
    build: {
        files: {
            'dist/foo.js': [
                'js/manager.js',  // Other files depend on this - must be included first
                'js/*.js',  // Does this mean manager.js will be included twice?
            ],
        }
    }
},

文件夹结构:

  

./ JS / manager.js
  ./js/bar.js
  ./js/baz.js

如果uglify抓取文件两次,任何建议如何避免这种情况而不必手动添加每个javascript文件?

1 个答案:

答案 0 :(得分:0)

简答

  

鉴于我的咕噜声uglify设置如下;文件manager.js会在结果文件foo.js中包含两次吗?

不,js/manager.js的内容将在结果文件中首先显示(即dist/foo.js),并且 NOT 将使用您当前的{{1}包含两次任务配置。

  

或者uglify是否足够智能以确定不包括uglify两次?

是的,但实际上manager.js可以在将grunt个唯一文件路径传递给Array之前解决此问题。

长答案

摘自Globbing patterns的grunt文档:

  1.   

    此外,为了简化其他复杂的globbing模式,Grunt允许指定文件路径或globbing模式的数组。模式按顺序处理,uglify - 前缀匹配,不包括结果集中的匹配文件。 结果集是唯一的

    这里的相关部分是:结果集是唯一的

  2. 以下代码示例也在文档中给出:

    !
  3. 为了证明文档中提到的要点,我们假设我们在// Here, bar.js is first, followed by the remaining files, in alpha order: {src: ['foo/bar.js', 'foo/*.js'], dest: ...} 目录中存储了以下五个源.js文件。每个文件的伪内容在文件名下面提供:

    • <强> js/

      manager.js
    • <强> console.log('manager.js')

      a.js
    • <强> console.log('a.js')

      bar.js
    • <强> console.log('bar.js')

      baz.js
    • <强> console.log('baz.js')

      quux.js

    如果我们使用上面列出的文件和您当前的console.log('quux.js') 任务配置运行grunt,结果输出为:

    <强> foo.js

    uglify

    如你所见:

    1. console.log("manager.js"),console.log("a.js"),console.log("bar.js"),console.log("baz.js"),console.log("quux.js"); 首先出现一次(即结果集已经单独出现)。
    2. 其他文件(即通过glob模式console.log("manager.js")找到的文件)已按字母顺序添加。