使用webpack-bundle-analyzer我在我的生产包中检测到了 StoreDevtoolsModule 模块。
我以为摇晃三下就可以去除它,但它并没有......
有没有办法在没有它的情况下构建生产模式?(无论如何在生产中都不会使用它):
(....)
// \/ this one
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
@NgModule({
imports: [
(....),
!environment.production ? StoreDevtoolsModule.instrument() : [],
(....),
],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
The*_*bio 10
在与我的同事讨论这个问题后,我们认为它位于捆绑包中的原因是因为environment.production在运行时评估,所以树摇动不会从捆绑包中删除该模块。事件虽然没有真正使用。
不过,有一种方法可以解决这个问题。
首先创建2个文件:
一个用于托管非产品的导入数组(默认),包含以下内容
src/帽子戏法/store-dev-tools-import.ts
import { environment } from 'src/environments/environment';
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
export const storeDevToolsImport = [
!environment.production ? StoreDevtoolsModule.instrument() : []
];
Run Code Online (Sandbox Code Playgroud)
另一个用于托管产品构建的导入数组,其中包含以下内容
src/hat-trick/store-dev-tools-import.prod.ts :
export const storeDevToolsImport = [];
Run Code Online (Sandbox Code Playgroud)
在生产构建配置的文件中添加一个fileReplacements部分:angular.json
"production": {
(....)
"fileReplacements": [
(....)
{
"replace": "src/hat-trick/store-dev-tools-import.ts",
"with": "src/hat-trick/store-dev-tools-import.prod.ts"
},
]
}
Run Code Online (Sandbox Code Playgroud)
最后,storeDevToolsImport在模块中使用新变量,而不是StoreDevtoolsModule直接导入:
@NgModule({
imports: [
(....),
...storeDevToolsImport,
(....),
],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
并做了!下次您在生产模式下构建时,将不再包含 StoreDevtoolsModule(节省约 4kb)
NgRx 文档在隐藏位置具有与上述问题的评论相同的解决方案
| 归档时间: |
|
| 查看次数: |
2807 次 |
| 最近记录: |