【发布时间】:2014-09-16 19:29:58
【问题描述】:
我正在尝试使用 gulp-concat 将组合的 JavaScript 和 CSS 资源生成到一个文件中:
var concatjs = gulp
.src(['app/js/app.js','app/js/*Controller.js', 'app/js/*Service.js'])
.pipe(concat('app.js'))
.pipe(gulp.dest('build'));
我得到了一个连接文件,但是嵌入在组合输出文件中的 javascript 文件的顺序是随机的 - 在这种情况下,控制器出现在初始 app.js 文件之前,这会在尝试加载时导致问题在加载任何相关资源之前需要 app.js 的 Angular 应用程序。同样,对于以随机顺序组合的 CSS 资源,顺序也很重要 - 即。 bootstrap 需要在主题和任何自定义样式表之前加载。
如何设置串联过程以保持订单不变?
更新 所以事实证明,上述 DOES 的排序实际上是通过在文件规范数组中明确指定文件顺序来工作的。所以在这种情况下,关键是首先列出 app/js/app.js,然后让其余顺序无关紧要的脚本按任何顺序排列。
我没有看到这种行为的原因(Duh!)是 Gulp Watch 正在运行,而 gulpfile.js 更新实际上并未反映在输出中。重新启动 gulp 确实更新了脚本。新手错误...
其他想法: 不过仍然想知道 - 这是指定构建顺序的正确位置吗?看来您现在正在将应用程序逻辑(加载顺序)填充到构建脚本中,这感觉不对。还有其他方法可以解决这个问题吗?
【问题讨论】:
-
您是否尝试过按顺序给出文件名,而不是传递正则表达式来读取所有文件。
-
这看起来像一个类似的问题stackoverflow.com/questions/21961142/…
-
我的原始脚本包含明确的文件名,并且最初不起作用。事实证明,问题在于 gulp-watch 正在运行并且没有刷新 gulpfile.js 更改(呃!)。使用更新的文件重新运行确实尊重源文件规范顺序。谢谢!
-
你试过用 browserify 或者 requirejs 来处理你的 js 依赖吗?这样你就可以保持你的加载顺序独立于你的构建过程。