我在这里乱了好几天。我试图让browserfiy与基于角度的应用程序一起工作。我尝试了以下选项,但仍然无法决定更好的方法,如果有人可以对此提出任何建议,我们将不胜感激。
使用vendor.js
bundle.require
中
使用app.js
bundle.external
在开发环境中工作正常,可以从app.js
中获取vendor.js中的所有模块但它在生产环境中崩溃了。缩小的角度文件不是所有CMD。虽然我可以browserify-shim
angular.min.js和bundle.require
angular-ui-router.min.js,但它可以通过文件来执行此文件。
将所有有角度的库保留为<script>
,并仅输出应用程序文件的包。这意味着在app.js中,我必须将angular称为全局var,这是不好的。
那么这样做的最佳做法是什么?
答案 0 :(得分:1)
即使你执行require()
angularjs,它仍会在其环境的上下文中公开angular
命名空间(浏览器的Window
对象)。我通常做的只是将所有angularjs模块依赖项(例如ui.router
,ngResource
等)放在angularjs应用程序所在的捆绑(浏览器化)javascript下面。在我的例子中,我使用gulp-useref
来连接gulp-inject
标签提供的所有脚本(这包括browserify捆绑的脚本)。
正如您在下面可能已经注意到的那样,bower组件(bower:js
标签)被添加到包(inject:js
标签)下方。由于要求angular
模块会将angular
对象附加到window
对象中,因此browserify外部的任何组件都可以访问window.angular
。
我提供的答案与选项2类似,但没有将angular
作为浏览器化代码中的全局变量的缺点。
e.g。
<!-- build:js({./.tmp,./}) js/index.js -->
<!-- inject:js -->
<!-- endinject -->
<!-- bower:js -->
<!-- endinject -->
<!-- endbuild -->
更新:
我创建的github repo类似于上面提供的答案。尝试克隆它,看看你可以用它做什么。