【问题标题】:How does browserify work with angular based app?browserify 如何与基于角度的应用程序一起使用?
【发布时间】:2015-03-23 04:37:14
【问题描述】:

这几天我一直在纠结这个问题。我试图让 browserfiy 与基于角度的应用程序一起工作。我已经尝试了以下选项,但仍然无法决定更好的方法,如果有人对此提出任何建议,我们将不胜感激。

  • 选项 1

使用bundle.require将所有与角度相关的库(如角度、角度动画、角度用户界面路由器等)捆绑到vendor.js

使用bundle.external将所有应用程序生成的源文件捆绑到app.js

这在开发环境中运行良好,app.js 可能需要 vendor.js 中的所有模块

但它在 prod 环境中崩溃了。缩小的角度文件并不都是 CMD。虽然我可以browserify-shim angular.min.js 和bundle.require angular-ui-router.min.js,但逐个文件处理这个文件有点麻烦。

  • 选项 2

将所有 Angular 库保留在 <script> 中,并且仅输出应用程序文件的捆绑包。这意味着在 app.js 中,我必须将 angular 称为不好的全局变量。

那么,这样做的最佳做法是什么?

【问题讨论】:

    标签: angularjs angular-ui-router browserify


    【解决方案1】:

    即使你使用require() angularjs,它仍然会在其环境上下文中公开angular 命名空间(浏览器的Window 对象)。我通常所做的只是将所有 angularjs 模块依赖项(例如ui.routerngResource 等)放在 angularjs 应用程序所在的捆绑(浏览器)javascript 之下。就我而言,我使用gulp-useref 连接gulp-inject 标签提供的所有脚本(这包括browserify 捆绑的脚本)。

    正如您可能在下面注意到的那样,Bower 组件(bower:js 标签)被添加到捆绑包(inject:js 标签)下方。由于需要angular 模块会将angular 对象附加到window 对象中,因此browserify 外部的任何组件都可以访问window.angular

    我提供的答案在某种程度上类似于选项 2,但没有将 angular 引用为浏览器代码中的全局变量的缺点。

    例如

    <!-- build:js({./.tmp,./}) js/index.js -->
    <!-- inject:js -->
    <!-- endinject -->
    <!-- bower:js -->
    <!-- endinject -->
    <!-- endbuild -->
    

    更新:

    我创建了一个类似于上面提供的答案的github repo。尝试克隆它,看看你能用它做什么。

    【讨论】:

    • 所以看起来你 gulp-useref 都在一个 index.js 中,包括你的应用程序包和来自 bower 的所有角度依赖项。问题是你怎么能通过上面显示的方式做到require('angular')
    • 生产环境呢?基本上你需要所有的缩小文件,所以我认为 dev 和 prod 应该分开 gulp 工作流程吧?
    • 那么你安装 angular 作为 npm 依赖而不是 bower bower one?
    • 生产代码应该在构建之后分开。
    • 是的,我 npm install angular 因为我的第一个意图是将它们浏览到供应商捆绑包中。从你的代码来看,最后只有 index.js?
    猜你喜欢
    • 1970-01-01
    • 2016-08-15
    • 2018-08-10
    • 1970-01-01
    • 2020-07-02
    • 2015-07-07
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多