webpack AngularCompilerPlugin hostReplacementPaths选项不起作用

时间:2018-08-03 15:39:57

标签: angular webpack ngtools

在我将其更新为Angular6并将@ngtools/webpack从“ 6.0.0-beta.8”更新为“ 6.1.2”之后,我发现 hostReplacementPaths 选项不再起作用。

通常它会替换正确的环境文件:

new AngularCompilerPlugin({
  ...
  hostReplacementPaths: {
    'environments/environment.ts': environmentFiles[NODE_ENV]
  },
  ...
})

但是现在没有。

我对@ ngtools / webpack进行了深度调试,发现normalize在这里起作用 https://github.com/angular/angular-cli/blob/master/packages/ngtools/webpack/src/virtual_file_system_decorator.ts#L188 不起作用

这一个 https://github.com/angular/angular-cli/blob/master/packages/angular_devkit/core/src/virtual-fs/path.ts#L199

仍然找不到它出了什么问题。 也许有人已经解决了这个问题?

在angular-cli仓库中创建了一个问题-https://github.com/angular/angular-cli/issues/11801

2 个答案:

答案 0 :(得分:2)

如您的问题中所述,这是版本6.1.0-rc.2的一个已知错误,在推出补丁之前,您应降级至6.1.0-rc.1

答案 1 :(得分:2)

此PR很快就会解决-https://github.com/angular/angular-cli/pull/11809

如James所述,此提交https://github.com/angular/angular-cli/commit/86a62adbe8faeb4628296d5d6915c54e6dbfd85b

6.1.0-rc.2中引入了一个错误。

路径解析不正确。

之前:

const normalizedFrom = normalize(from);
const normalizedWith = normalize(this._options.hostReplacementPaths[from]);

建议的解决方法:

const normalizedFrom = resolve(normalize(this._basePath), normalize(from));

const normalizedWith = resolve(
  normalize(this._basePath),
  normalize(this._options.hostReplacementPaths[from]),
);