and*_*eas 4 typescript angular-cli angular
我目前正在开发一个 Angular 应用程序。在某些时候,我注意到每次应用程序刷新(使用应用更改时ng serve)需要越来越长的时间。目前,我最多可能需要 10 秒才能看到浏览器中的更改(Chrome、也测试了 Firefox 和 Safari)。
首先我忽略了它,因为我认为这是我的浏览器。但当我后来检查时,我发现开发大小main.js高达27 MB。我做过其他更大的项目,但从未遇到过这样的问题。我也不明白这是怎么发生的。即使ng build --prod输出仍然超过 8 MB,这在我看来太大了。
当然我可以开始使用 git 回滚,但我希望可能有更好的方法来确定文件大小爆炸的原因?我希望有人能给我一些提示,从哪里开始。
这是ng version输出:
Angular CLI: 7.0.6
Node: 8.11.2
OS: darwin x64
Angular: 7.1.0
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router
Package Version
------------------------------------------------------------
@angular-devkit/architect 0.10.6
@angular-devkit/build-angular 0.10.6
@angular-devkit/build-ng-packagr 0.10.6
@angular-devkit/build-optimizer 0.10.6
@angular-devkit/build-webpack 0.10.6
@angular-devkit/core 7.0.6
@angular-devkit/schematics 7.0.6
@angular/cli 7.0.6
@ngtools/json-schema 1.1.0
@ngtools/webpack 7.0.6
@schematics/angular 7.0.6
@schematics/update 0.10.6
ng-packagr 4.4.0
rxjs 6.3.3
typescript 3.1.6
webpack 4.19.1
Run Code Online (Sandbox Code Playgroud)
这是我目前的package.json:
{
"name": "website",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "^7.1.0",
"@angular/common": "^7.1.0",
"@angular/compiler": "^7.1.0",
"@angular/core": "^7.1.0",
"@angular/forms": "^7.1.0",
"@angular/http": "^7.1.0",
"@angular/platform-browser": "^7.1.0",
"@angular/platform-browser-dynamic": "^7.1.0",
"@angular/router": "^7.1.0",
"@ng-bootstrap/ng-bootstrap": "^4.0.0",
"@ngx-translate/core": "^11.0.1",
"@ngx-translate/http-loader": "^4.0.0",
"@types/chart.js": "^2.7.40",
"bootstrap": "^4.1.3",
"chart.js": "^2.7.3",
"core-js": "^2.5.4",
"ionicons": "^4.4.7",
"json2typescript": "^1.0.6",
"moment": "^2.22.2",
"ngx-infinite-scroll": "^6.0.1",
"ngx-moment": "^3.2.0",
"ngx-swiper-wrapper": "^7.1.0",
"rxjs": "~6.3.3",
"swiper": "^4.4.2",
"zone.js": "~0.8.26"
},
"devDependencies": {
"@angular-devkit/build-angular": "^0.10.6",
"@angular-devkit/build-ng-packagr": "^0.10.6",
"@angular/cli": "^7.0.6",
"@angular/compiler-cli": "^7.1.0",
"@angular/language-service": "^7.1.0",
"@types/jasmine": "^3.3.0",
"@types/jasminewd2": "^2.0.6",
"@types/node": "^10.12.10",
"codelyzer": "^4.5.0",
"jasmine-core": "~3.3.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~3.1.1",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
"ng-packagr": "^4.4.0",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tsickle": "^0.34.0",
"tslib": "^1.9.0",
"tslint": "^5.11.0",
"typescript": "^3.1.6"
}
}
Run Code Online (Sandbox Code Playgroud)
还有一件事:
我已将代码库的某些部分移至附加模块(最终应该是一个单独的 NPM 包)。我必须承认我是第一次这样做,但是由于这部分相当小(没有 GUI,只有 TypeScript 类),所以这不应该是错误的。
在这种情况下,我集成 Bootstrap 的方式有问题。我按照How to use Bootstrap 4 with SASS in Angular中的答案进行操作,并能够解决我的问题。
以下几点很重要:
导入 scss,而不是 css angular.json:
"styles": [
"node_modules/bootstrap/scss/bootstrap.scss"
]
Run Code Online (Sandbox Code Playgroud)
在我的例子中,只导入非常必要的文件styles.scss:
@import "~bootstrap/scss/functions";
@import "~bootstrap/scss/variables";
Run Code Online (Sandbox Code Playgroud)
之前,我在这里导入了整个 Bootstrap scss 文件。问题是 Angular CLI(出于某种原因)多次导入整个 Bootstrap,事实上每次组件 scss 导入我的main.scss.
结果差异:
在下表中,我显示了应用修复之前和之后文件大小的差异。可以说,差异是疯狂的:
Command | before | after
---------------------------------------
ng build | 27.1 MB | 2.87 MB
ng build --prod | 8.1 MB | 1.54 MB
Run Code Online (Sandbox Code Playgroud)
我希望我可以帮助其他有类似问题的人。
| 归档时间: |
|
| 查看次数: |
1652 次 |
| 最近记录: |