javascript - 使用 Webpack 与主模块一起构建独立模块

标签 javascript angular typescript webpack webpack-2

我有一个由 Webpack 2 构建的 Angular 2 应用程序,基于 AngularClass starter项目。你可能会从这个问题中看出,我仍然是一个 Webpack n00b。

作为我正在实现的一项新功能的一部分,我想开发一个可下载到客户端的独立小部件。它在逻辑上是我的主应用程序的一部分,但不使用 Angular,因此不应直接依赖于浏览器中加载的主 Angular 应用程序。但是,它确实共享一些代码和设置 - 例如 SASS、端点 URL、lint 规则和一些 TypeScript 类。

为了保持干燥,我希望使用相同的 Webpack 配置来构建 App 和 Widget。为了开始,我告诉 Webpack 将我的小部件构建为一个单独的模块:

entry: {    
    'polyfills': './src/polyfills.browser.ts',
    'main': AOT ? './src/main.browser.aot.ts' :
        './src/main.browser.ts',
    'widget': './src/app/widget/index.ts'      // <-- added this
}

我现在有三个问题。

使 widget.bundle.js 独立

因为 Webpack 将共享依赖项捆绑在一起,我仍然必须加载我所有的 Angular 应用程序模块才能让我的小部件工作:

<script src="http://localhost:8080/polyfills.dll.js"></script>
<script src="http://localhost:8080/vendor.dll.js"></script>
<script src="http://localhost:8080/polyfills.bundle.js"></script>
<script src="http://localhost:8080/vendor.bundle.js"></script>
<script src="http://localhost:8080/main.bundle.js"></script>
<script src="http://localhost:8080/widget.bundle.js"></script>

我希望我的小部件完全独立,这样我就可以加载:

<script src="http://localhost:8080/widget.bundle.js"></script>

防止 widget.bundle.js 在主应用中加载

现在,当我运行主应用程序时,它还会尝试加载 widget.bundle.js。我想阻止这种情况。

Webpack 将 block ID 附加到包名称

对于生产构建,Webpack 使用类似 widget.234e2174f24f78d1072c.bundle.js 的名称创建我的小部件包。这不好,因为这会在每次构建时发生变化,所以我的所有客户都必须使用新名称进行更新。如何使此名称静态化?

最佳答案

我想得越多,就越明显我需要一个完全独立的 webpack.config.js 这个小部件。基于我现有的配置之一,这并不难做到。我最终得到了一个简单的配置,只有一个入口和一个输出,删除了所有不需要的插件,尤其是 CommonChunkPlugin,它根据共享的依赖关系拆分模块。

    entry: {
        'selector-widget': './src/app/widget/index.ts'
    },

    output: {
        path: helpers.root('dist'),
        filename: 'widget.bundle.js'
    }

然后我在 package.json 中创建了一个新脚本来构建小部件,然后从主要生产构建脚本中调用它。

关于javascript - 使用 Webpack 与主模块一起构建独立模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43796735/

相关文章:

typescript - 如何在 ionic 应用程序中从电容器浏览器的回调中正确检索重定向 URL

javascript - 如何获取 Typescript 记录中值的键

javascript - 如果第一个回调没有返回 Promise,那么可以调用吗?

javascript - 如何在动画 JavaScript anchor 滚动时编辑 URL 名称?

javascript - 使用对象数组等循环遍历对象数组

javascript - 使用 Mongoose 的 .populate() 返回某些字段

javascript - 用从源代码中删除代码代替显示无

javascript - 为什么使用 NGRX 而不是构造函数注入(inject)服务?

angular - 有没有更好的方法来顺序调用不同的可观察调用?

svg - 组件单元测试 : By. css() 在 SVG 命名空间中时不匹配