鉴于我在下面的咕噜咕噜的丑陋设置;该文件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
之前解决这个问题。
长答案
通配模式的咕噜咕噜文档摘录如下:
-
此外,为了简化其他复杂的通配模式,Grunt 允许指定文件路径数组或通配模式。模式按顺序处理,
!
前缀的匹配项从结果集中排除匹配的文件。结果集是唯一的。这里的相关部分是:结果集是唯一的
-
文档中还给出了以下代码示例:
// 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");
如您所见:
console.log("manager.js")
首先出现且仅出现一次(即结果集是唯一的)。- 其余文件(即通过 glob 模式找到的文件
'js/*.js'
)已按字母顺序添加。