如果使用通配符选择器,将包含文件两次



鉴于我在下面的咕噜咕噜的丑陋设置;该文件manager.js包含在生成的文件foo.js中两次吗?还是丑陋足够聪明,可以弄清楚不包括两次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 文件吗?

简答题

鉴于我在下面咕噜咕噜的丑陋设置; 该文件manager.js包含在生成的文件foo.js中两次吗?

不,js/manager.js的内容将在生成的文件中排在第一位,(即dist/foo.js),并且不会使用您当前的uglify任务配置包含两次。

还是uglify足够聪明,可以弄清楚不包括两次manager.js

是的,但是实际上grunt在将Array的唯一文件路径传递给uglify之前解决这个问题。


长答案

通配模式的咕噜咕噜文档摘录如下:

  1. 此外,为了简化其他复杂的通配模式,Grunt 允许指定文件路径数组或通配模式。模式按顺序处理,!前缀的匹配项从结果集中排除匹配的文件。结果集是唯一的

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

  2. 文档中还给出了以下代码示例:

    // 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')
    

如果我们使用上面列出的文件和您当前的uglify任务配置运行grunt,则结果输出为:

傅.js

console.log("manager.js"),console.log("a.js"),console.log("bar.js"),console.log("baz.js"),console.log("quux.js");

如您所见:

  1. console.log("manager.js")首先出现且仅出现一次(即结果集是唯一的)。
  2. 其余文件(即通过 glob 模式找到的文件'js/*.js')已按字母顺序添加。

最新更新