我想在webpack编译过程中替换每种类型的一些代码。现在我有这样的东西:
module: {
rules: [
{
test: /.ts$/,
enforce: 'pre',
loader: [
{
"loader": "test-loader"
}
]
},
{
test: /.ts$/,
loader: [
{
"loader": "@ngtools/webpack",
"options": {
"tsConfigPath": "tsconfig.json",
}
}
]
}
]
},
和我的 test-loader 看起来像这样:
module.exports = function (source, map) {
var callback = this.async();
source = myReplaceFunction(source)
this.cacheable && this.cacheable();
callback(null, source, map);
};
根据这个问题,应为每个打字稿文件调用我的加载程序( test-loader ((并且是(。下一个Loader(@ngtools/webpack (应在修改后( test-loader (打字稿文件进行操作,但不是,为什么那是>?
我的配置:
- webpack v3.10.0
- typescript 2.6.2
- 节点 v9.4.0
- @ngtools/webpack v1.10.0-beta.3(1.6.4的情况相同(
没有enforce: 'pre'
相同的效果。我正在尝试这样做,但是更简单。
如果您检查 @ngtools/webpack(node_modules/@ngtools/webpack/src/loader.js
(的源,您会注意到加载程序dome not 从上一个加载程序中获取任何输入。取而代之的是,它抓住了您的源打字稿文件的文件名const sourceFileName = this.resourcePath;
,并将其转换为JavaScript。因此,Angular完全忽略了您注入的任何预载器,并直接从源中抓取。
希望它有帮助