但是,当我尝试使用命令
ng build --prod
为生产环境构建此空白的通用应用程序时,根本没有创建main.*.js文件,并出现了许多警告屏幕,如:- 删除未使用的函数... - 初始化中的站点效果... - 等等
这是一个全新的空项目——我还没有机会弄坏任何东西...
如何构建生产版本?
ng build --prod
为生产环境构建此空白的通用应用程序时,根本没有创建main.*.js文件,并出现了许多警告屏幕,如:已更新至 Angular v6+
# Prod - these are equivalent
ng build --configuration=production
ng build --c=production
ng build --prod=true
# Dev - and so are these
ng build --configuration=development
ng build --c=development
ng build --prod=false
ng build
这里有更多的标志设置
根据Angular-cli的Github Wiki v2+,这是启动开发和生产构建的最常见方法:
# Prod these are equivalent
ng build --target=production --environment=prod
ng build --prod --env=prod
ng build --prod
# Dev and so are these
ng build --target=development --environment=dev
ng build --dev --env=dev
ng build --dev
ng build
有不同的默认标志会影响--dev与--prod构建。
Flag --dev --prod
--aot false true
--environment dev prod
--output-hashing media all
--sourcemaps true false
--extract-css false true
--prod
还会设置以下无法通过标志控制的设置:
.angular-cli.json
中配置了 Service Worker,则添加 Service Worker。process.env.NODE_ENV
替换为 production
值(这对某些库(如React)是必需的)。我需要进行一些故障排除,以使 AOT 正常工作。当我运行以下命令时:
ng build --prod --aot=false
我会得到与以下类似的错误信息:
Module not found: Error: Can't resolve './$$_gendir/app/app.module.ngfactory'
原本,我需要进行一些项目重构才能让AOT工作。然而,如果你遇到了这个错误,可能有一个解决方法。试试运行以下命令:
npm i enhanced-resolve@3.3.0
ng build --configuration=production
,并在此处设置标志文件替换? - mkbng build --prod
试一试
ng build --env=prod
environment.ts
, 但是如果你执行 ng build --env=prod
, 那么将会使用 environment.prod.ts
.
如果你的项目是基于新版 Angular CLI 创建的,那么结果如下:
10% building mod3439ms building modules 1ms add01564ms 917ms asset45ms emittingHash: 9216e76d6f10637c945c
Version: webpack 2.1.0-beta.22
Time: 6358ms
Asset Size Chunks Chunk Names
main.bundle.js 2.6 MB 0, 2 [emitted] main
styles.bundle.js 10.2 kB 1, 2 [emitted] styles
inline.js 5.53 kB 2 [emitted] inline
main.map 2.61 MB 0, 2 [emitted] main
styles.map 14.2 kB 1, 2 [emitted] styles
inline.map 5.59 kB 2 [emitted] inline
index.html 482 bytes [emitted]
assets/.npmignore 0 bytes [emitted]
chunk {0} main.bundle.js, main.map (main) 2.06 MB {1} [initial] [rendered]
chunk {1} styles.bundle.js, styles.map (styles) 9.96 kB {2} [initial] [rendered]
chunk {2} inline.js, inline.map (inline) 0 bytes [entry] [rendered]
Child html-webpack-plugin for "index.html":
Asset Size Chunks Chunk Names
index.html 2.82 kB 0
chunk {0} index.html 350 bytes [entry] [rendered]
完成后,项目会被构建在 /dist 目录下,除非你已经在 angular-cli.json 文件中更改了 outDir
的值。
您想要AOT,这是由于使用-prod
开关所暗示的。不幸的是,当Angular CLI本身出现故障时,错误消息并不有用。以下是我解决问题的方法:
npm install enhanced-resolve@3.3.0
我在这个页面中找到了解决方案:https://github.com/angular/angular-cli/issues/7113
我看到有人提到将Angular CLI版本更新至至少1.2.6也可以解决问题,但我还没有测试过。
无论是否实现Aot。
如果实现了Aot:
ng build --prod
如果AOT未被实现:
ng build --prod --aot=false
ng build --prod --aot=false
您的项目需要进行JIT编译,并且如果使用angular-cli,则必须正常工作。
如果想要通过命令进行构建
ng build --prod --aot=true
如果是AOT编译,您需要将main.ts文件更新为:
import { enableProdMode } from '@angular/core';
import { platformBrowser } from '@angular/platform-browser';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
platformBrowser().bootstrapModuleFactory(AppModule);
有很多命令可以使用Angular CLI将应用程序构建为生产模式。
ng build --env=prod
一旦您在cmd上执行此命令,将创建默认的dist文件夹,其中包含所有与prod构建相关的缩小文件,但它不会在index.html中设置基本路径。 要更改index.html,请手动更改,例如添加(.)。
<base href="./">
您还可以使用angular/CLI命令在生产模式下构建代码时传递参数。
ng build --base-href=./ --env=prod
还有其他命令可用于构建,例如传递AOT和build-optimizer(以减小捆绑包大小)。
ng build --prod --build-optimizer
这些是 uglify js 警告,可能来自您的 JavaScript 源代码或您在项目中使用的第三方库。目前您可以忽略它们。
Angular CLI 团队正在努力抑制这种警告,以便于生产构建。 https://github.com/angular/angular-cli/pull/1609