我有一个名为webpack的loader messageformat-loader
,它接收JSON,传递给messageformat.js,并输出格式化函数的结果图。单个文件可以正常工作。
./简单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&#39; s CLI接受一个文件队列,然后在将文件传递给编译器之前,使用文件名作为其密钥聚合成一个JSON对象。
我如何使用webpack
完成此操作,因为不支持全局?
./多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)
我的尝试:
在webpack.config.js
中自行应用glob(按照建议here)
messageformat-loader
?如果我不这样做,我会为每个JSON文件包含messageformat.js
个运行时一次。
使用require.context
(按照建议here)
不幸的是,这很尴尬因为webpack需要资源文件,即使它没有被使用
require('messageformat?locale=en!multi-json?cwd=data&glob=**/*.json!./irrelevant.whatever')
我可以将glob移动到资源文件中,例如glob-loader
,但是从源文件中提取加载器的参数对我来说更加尴尬。
我应该制作messageformat-plugin
而不是装载机吗?然后,我就可以完全控制这些块。但这感觉就像是错误的抽象。
答案 0 :(得分:0)
我认为你想要的是所谓的“解析器”插件(与你的webpack加载器结合使用)。配对插件和加载器不受限制(请参阅extract text plugin: - )。
set.seed(1L);
dt1 <- data.table(id=1:12,expand.grid(V1=1:3,V2=1:4),blah1=rnorm(12L));
dt2 <- data.table(id=13:18,expand.grid(V1=1:2,V2=1:3),blah2=rnorm(6L));
dt1;
## id V1 V2 blah1
## 1: 1 1 1 -0.6264538
## 2: 2 2 1 0.1836433
## 3: 3 3 1 -0.8356286
## 4: 4 1 2 1.5952808
## 5: 5 2 2 0.3295078
## 6: 6 3 2 -0.8204684
## 7: 7 1 3 0.4874291
## 8: 8 2 3 0.7383247
## 9: 9 3 3 0.5757814
## 10: 10 1 4 -0.3053884
## 11: 11 2 4 1.5117812
## 12: 12 3 4 0.3898432
dt2;
## id V1 V2 blah2
## 1: 13 1 1 -0.62124058
## 2: 14 2 1 -2.21469989
## 3: 15 1 2 1.12493092
## 4: 16 2 2 -0.04493361
## 5: 17 1 3 -0.01619026
## 6: 18 2 3 0.94383621
key <- paste0('V',1:2);
dt1[dt2,on=key,id:=i.id];
dt1;
## id V1 V2 blah1
## 1: 13 1 1 -0.6264538
## 2: 14 2 1 0.1836433
## 3: 3 3 1 -0.8356286
## 4: 15 1 2 1.5952808
## 5: 16 2 2 0.3295078
## 6: 6 3 2 -0.8204684
## 7: 17 1 3 0.4874291
## 8: 18 2 3 0.7383247
## 9: 9 3 3 0.5757814
## 10: 10 1 4 -0.3053884
## 11: 11 2 4 1.5117812
## 12: 12 3 4 0.3898432