angularjs build cli_使用Angular CLI进行Build(构建)和Serve详解

第一篇文章是: "使用angular cli生成angular5项目" :

第二篇文章是: "使用angular cli从蓝本生成代码" :

第三篇文章是: "使用angular cli生成路由" :

build.

build主要会做以下动作:

编译项目文件并输出到某个目录

build targets决定了输出的结果

bundling 打包

生产环境的build还会进行uglify和tree-shaking(把没用的代码去掉)

ng build.

可以先看帮助:

ng build --help

针对开发环境, 就是用命令 ng build.

默认情况下, 它的输出目录在.angular-cli.json文件里ourdir属性配置的, 默认是/dist目录.

build之后会看见dist里面有这些文件:

inline.bundle.js 这是webpack的运行时.

main.bundle.js 就是程序代码.

pollyfills.bundle.js 就是浏览器的pollyfills.

styles.bundle.js 样式

vendor.bundle.js 是angular和第三方库

可以使用来分析依赖, 并且查看哪些模块和类在bundle里面.

首先修改上一个例子中的代码:

bf7a9c1161cfbd815f67a3262198cd9b.png

执行ng build:

dc5b67c212f535f81d6b888edfd28f42.png

955f5b54e843adad31de673a6e82b5c0.png

可以看到生成了这些文件.

把dist里面的index.html格式化一下看看:

3cb71e3f17c9b92cf57643f8e96f429f.png

可以看到它引用了生成的5个js文件.

打开main.bundle.js可以看到我写的代码:

8a24c897489429eb94a0559bceb95ea2.png

下面运行程序: ng serve -o:

f4ee70e81408c7e7d2ea2123d1bf9084.png

可以看到在ng serve的时候, 加载了上述的文件.

因为ng build是开发时的build, 所以没有做任何优化, 文件挺大的.

这时看一下文件目录, 并没有dist目录:

d72c1ce01f0639fc54a1784a5bf2c19c.png

那么这些文件是怎么被serve的呢?

这是因为, 这时候webpack是在内存中进行的serve.

下面使用source-map-explorer进行分析, 首先安装它:

npm install --save-dev source-map-explorer

然后执行 ng build, 再执行:

.\node_modules\.bin\source-map-explorer dist\main.bundle.js

结果会生成这个图形:

31db5a1d88030cae94934ec6eaddd5a6.png

再看看vendor.bundle的情况:

.\node_modules\.bin\source-map-explorer dist\vendor.bundle.js

f5177fc85295abf05d66eb6be66137b5.png

这里面东西就比较多了.

build targets和environment.

environment是指采用哪一个环境文件:

78c5fa4677d46daf771f779dd4467c04.png

而targets则是用来决定项目文件是如何被优化的.

看一下开发和生产build的对比.

ng build

ng build --prod

environment

environment.ts

environment..prod.ts

缓存

只缓存css里引用的图片

所有build的文件

source maps

生成

不生成

如何处理css

全局css输出到js文件

生成的是css文件

uglify

tree-shaking

不去掉无用代码

去掉无用代码

aot

bundling打包

--build-optimizer

是(和aot以及angular5)

--named-chunks

--output-hashing

media

所有

下面命令都是针对开发时的build, 它们的作用是一样的:

ng build

ng build --dev

ng build --dev -e=dev

ng build --target=development --environment=dev

下面则是生产build:

ng build --prod

ng build --prod -e=prod

ng build --target=production --environment=prod

其它常用的参数还有:

--sourcemap -sm 生成source map

--aot ahead of time编译

--watch -w watch并rebuild

--environment -e build环境

--target -t build target

--dev 表示dev env和target

--prod 表示prod env和target

production build.

先使用--aot:

ng build --aot

a77d08971297b8b82f64a57ddf8febb2.png

使用aot之后可以看到 vendor.bundle的大小降了很多, 只有1.5m左右了.

执行aot会去掉一些程序执行不需要的代码, 例如angular的compiler这时就不在build输出的文件里了(可以使用source-map-explorer查看).

试试生产环境:

ng build --prod

70db6cc3883e99e29fd6f2d8acd455cc.png

可以看到所有的文件都非常小了, 并且没有vendor了(因为prod下--build-optimizer起作用所以vendor没有了, 但可以使用--vendor-chunk true给弄出来).

serve.

ng serve. 已经一直在用了, 下面看看它常用的参数:

--open -o 打开默认浏览器

--port -p 端口

--live-reload -lr 发生变化时重新加载网页(默认开启的)

--ssl 使用https

--proxy-config -pc 代理配置

--prod 在内存中serve 生产模式build的文件

试试 --prod:

ng serve --prod

818804c8823cf093dbfaa3a75385fd43.png

通过文件大小可以看出确实是prod build的.

ng eject.

为项目生成webpack配置和脚本.

执行该命令试试:

2b57fad8fae578343c3f69a0b3a838ac.png

看看有哪些变化:

.angular-cli.json:

d13432d4fadad725e770a223cfe42854.png

package.json:

309c2f9e784ae8f5434780ca0dd79fc6.png

命令脚本都变了

c59dd1c40dd5b685f8bf2ef7651148a9.png

还多出来一个webpack.config.js文件:

491b063058ab4841b7dc4e5cb8a1fd54.png

为什么要这么做呢?

可以对项目更深入的配置....

这时运行程序就是 npm start了.

我还是把reject恢复回去吧, 使用git来恢复吧.

如果需要serve 其他js/css/assets文件:

f7339f3449f2341fa653f08eb718b319.png

放在.angular-cli.json就行, 例如jquery就应该放在scripts里面.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值