27

我正在开发一个 SBT/Scala Web 项目,我想利用 ES6 功能和前端 JavaScript 层的新模块语法。SBT 有自己的构建系统,我设法调整现有的 sbt 插件来运行 webpack 以使用 babel 构建我的 JS 文件。当前的解决方案有点混乱,但它可以在 sbt 构建系统中工作并存在。

问题是它很慢。每次更改都会创建一个新的 webpack 实例,它会从头开始编译所有内容。

我知道我可以跳出 sbt 构建系统,只在开发阶段单独使用 webpack 来观察和重建我的文件。但在我这样做之前,我想知道是否有一些方法可以加快 webpack 构建过程。

我检查了文档,在我看来,任何可用的缓存都只在内存中处理,这不适用于我的情况。或者是否有某种文件缓存可以在 webpack 构建的单独运行之间存在?例如,我所有的 npm 依赖项大部分时间都不会更改,因此它们可以编译一次,缓存然后简单地包含...

4

3 回答 3

38

需要考虑的一些配置:

于 2015-04-23T14:31:07.537 回答
4

问题是它很慢。每次更改都会创建一个新的 webpack 实例,它会从头开始编译所有内容。

当我们的模块库变大(3.5k+)时,我们也遇到了同样的问题,其中 webpack 在普通 MacBook 13 上需要长达 80 秒才能执行初始构建。

我们采用的方法是并行化转换阶段(基本上是 webpack 加载器),这在某些机器上的构建时间方面产生了多达 500% 的收益。查看https://github.com/amireh/happypack插件,看看它是否适合您。

它还不支持所有的加载器,但babel-loader我相信这是你需要的。

于 2016-03-28T22:56:33.147 回答
2

Webpack 有一个功能可以让您创建“DLL”(又名“库包”),您可以将其与主应用程序代码分开编译一次。

一个典型的工作流程是将任何大型的、不经常更改的库放在一个供应商库包中,您只需编译一次,然后为您自己的代码创建一个更小的应用包。

我在这里写了一篇关于如何做到这一点的帖子:https ://robertknight.me.uk/posts/webpack-dll-plugins/

在上面@bebraw 的建议中,我特别指出 1) 对现有的缩小库进行别名化,而不是将它们包含在包中 - 这与创建库包具有相同的好处,以及 2) 如果您使用的是转译器,那么重要的是转译器仅通过module.loaders.(include|exclude)选项在您自己的代码上运行,而不是所有库代码node_modules/

于 2016-02-07T09:03:10.573 回答