Mac*_*ski 43 webpack webpack-2 webpack-plugin
我在为翻译服务编写Webpack插件时遇到问题.
目标是:
t()功能,但我想只扫描那些将包含在包中的模块(根据构建配置,它可以是所有项目模块的子集).另一个要求是Webpack的代码拆分功能应该与动态创建的模块一起使用(我想将它们提取到单独的文件中 - 例如bundle.[lang].js).此外,这可能超出了这个问题的范围,我必须使这些翻译块可选(因此您不必加载所有语言,只需加载一个).
更多详细信息可以在https://github.com/ckeditor/ckeditor5/issues/387中找到.
我一直在尝试多种解决方案,但Webpack 2的文档并不是很有帮助.我可以通过听模组分辨率挂钩(让所有的模块before-resolve),但我不知道什么时候所有的依赖都解决了,我不知道我能不能以后添加更多的模块(以及如何做到这一点-是addEntryOK当我可以使用它?).
我也在考虑连接Webpack插件和Webpack加载器(因为我需要的功能非常类似于Webpack的样式加载器),但是从插件级别我只能添加加载器的路径,而不是加载器本身,所以我可以' t传递配置对象作为参数 - 我错了吗?
PS.我使用Webpack 2.如果您的需求看起来很奇怪,请参阅https://github.com/ckeditor/ckeditor5/issues/387 :).
这是一个非常复杂的问题,但我可以展示如何向特定模块添加额外的依赖项,就像该模块需要这些依赖项一样。这可以确保您添加的模块将位于正确的块中,并且如果从捆绑包中删除父模块,也会将其删除。
const CommonJsRequireDependency = require("webpack/lib/dependencies/CommonJsRequireDependency")
class MyPlugin {
apply(compiler) {
compiler.plugin("compilation", compilation => {
compilation.plugin("succeed-module", module => {
// this will be called for every successfully built module, but before it's parsed and
// its dependencies are built. The built source is available as module._source.source()
// and you can add additional dependencies like so:
module.dependencies.push(new CommonJsRequireDependency("my-dependency", null))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这只是其中的一部分。您可能还需要编写自己的加载器来实际生成翻译(您可以将my-dependency上面替换为my-loader!path/to/module立即调用它),并在创建块后执行某个步骤,以便将它们提取到新资产中并加载它们,因为它们不是“实际上没有require任何地方。
| 归档时间: |
|
| 查看次数: |
2105 次 |
| 最近记录: |