我有一个名为的webpack 加载器messageformat-loader
,它接收 JSON,通过messageformat.js传递它,并输出格式函数的结果映射。它适用于单个文件。
./simple-messages.json
{
"simple-example": "A simple message.",
}
./example.js
var messages = require('messageformat?locale=en!json!./simple-messages.json');
console.log(messages['simple-example']());
跑步
$ npm install webpack messageformat-loader messageformat@1.0.0-rc.3 json-loader
$ node_modules/.bin/webpack ./example.js bundle.js
<...omitted webpack output...>
$ node bundle.js
A simple message.
但是, messageformat.js 的CLI接受一组文件,然后在将文件传递给编译器之前,它使用文件名作为其键将其聚合到一个 JSON 对象中。
webpack
由于不支持 glob,我将如何使用它来完成此操作?
./multi-example.js
var messages = require('messageformat?locale=en!json!./*.json');
console.log(messages['simple-messages']['simple-example']());
跑步
$ node_modules/.bin/webpack ./multi-example.js bundle.js
<...omitted webpack output...>
ERROR in ./multi-example.js
Module not found: Error: Cannot resolve 'file' or 'directory' ./*.json in <path>/test123
@ ./multi-example.js 1:15-63
<path>/test123/bundle.js:47
var messages = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"messageformat?locale=en!json!./*.json\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
Error: Cannot find module "messageformat?locale=en!json!./*.json"
at webpackMissingModule (<path>/test123/bundle.js:47:81)
at Object.<anonymous> (<path>/test123/bundle.js:47:195)
at __webpack_require__ (<path>/test123/bundle.js:20:30)
at <path>/test123/bundle.js:40:18
at Object.<anonymous> (<path>/test123/bundle.js:43:10)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
我的尝试:
应用 glob
webpack.config.js
本身(如此处推荐)- 如何汇总结果并将它们传递给
messageformat-loader
? 如果我不这样做,我将为messageformat.js
每个 JSON 文件包含一次运行时。- 看起来这实际上可能是更好的方法,但我必须修改 messageformat.js 的输出以将运行时与字符串分开。
- 如何汇总结果并将它们传递给
使用
require.context
(这里推荐)- 看上面
-
不幸的是,这很尴尬,因为 webpack 需要一个资源文件,即使它没有被使用
require('messageformat?locale=en!multi-json?cwd=data&glob=**/*.json!./irrelevant.whatever')
我可以将 glob 移动到资源文件中,例如
glob-loader
,但是从源文件中提取加载程序的参数对我来说似乎更尴尬。- 这也是fontgen-loader所做的,所以这看起来是一种常见的方法。
我应该做一个
messageformat-plugin
而不是装载机吗?然后我就可以完全控制这些块了。不过,这感觉像是错误的抽象。