angular2-aot-webpack 生产环境下编译angular2

这里讲讲,angular2在生产模式下用webpack2进行打包的方法:

//使用rollup打包还是比较坑的,功能及插件上都不如webpack, 关键不支持代码分离,导致angular里的lazy loader将无法使用。

具体步骤:

angular=>aot=>webpack(Tree shaking&& Uglify)

angular=>aot:

首先你需要的依赖:

"@angular/compiler"     "@angular/compiler-cli"        "@angular/platform-browser"。

npm install 安装他们。

以下是目录结构:

...
 ./package.json
 ./tsconfig.aot.json
 ./tsconfig.json
 ./webpack.pro.config.js
 ./src/
     |--./main.ts
     |--./main.aot.ts
     |--./app.module.ts
     |--./router.module.ts
     |--./app.component.ts     |--./child/              |--./child.module.ts              |--./child.component.ts     

  

准备一个tsconfig.aot.json:

{
  "compilerOptions": {
    "module": "es2015",
    "moduleResolution": "node",
    "declaration": true,
    "target": "es5",
    "noImplicitAny": false,
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "typeRoots": [ "./node_modules/@types" ],
    "lib": [
      "dom",
      "es2015"
    ]
  },
  "angularCompilerOptions": {      //这是aot.json独有的,genDir:"." ,示意,生成的NgFactory文件放于原文件路径内。你也可以genDir:‘aot‘,放在aot文件内,但我建议你放在原路径里。
    "genDir": ".",
    "skipMetadataEmit":true
  },
  "files":[
    "src/app.module.ts",           //从app.module.ts这个文件开始进行编译。
    "src/child/child.module.ts"    //这是lazy loader模块,因为是惰性加载模块,而没有在原模块中import或require它,所以需要单独编译。
  ],
  "compileOnSave": false,
  "exclude": [
    "node_modules",
    "src/polyfill.ts"
  ]
}

 接下来运行npm run ngcStart;     // package.json : "ngcStart": "ngc -p tsconfig-aot.json"

你会发现 src/文件内生成了许多*.ngfactory.ts , 这些就是提供给生产环境,最终使用的angular文件。自此预编译完成。

(.js文件可以删除它,‘rimraf src/*.js src/*/*.js‘。)

aot=>webpack:

我们需要从main.aot.ts来引导这些aot文件,这是main.aot.ts文件(别从main.ts引导):

import { platformBrowser }    from ‘@angular/platform-browser‘;
import { AppModuleNgFactory } from ‘./app.module.ngfactory‘;
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);

好了,下面是webpack的配置:

{               /....../
		entry:{
			‘main‘:‘./src/main.aot.ts‘
		},
		output:{
			path:‘dest‘,
			filename:‘[name].bundle.js‘,
			chunkFilename:‘[id].chunk.js‘
		},
		module:{
            rules:[
              {test: /\.ts$/,use:[
                ‘awesome-typescript-loader‘,                   //我建议你用awesome-typescript-loader进行ts加载。
                ‘angular2-template-loader‘,
                ‘angular2-webpack2-lazy-children-loader‘       //这是针对lazy loader 的插件,后面会单独说
              ]},
              {test:/\.json$/,use:‘json-loader‘},

              {test:/\.html$/,use:‘raw-loader‘},
              {test:/\.(jpg|png|gif)/,use:‘file-loader?name=[path][name].[ext]‘}
            ]
         }
		plugins:[
                   /..../
            new webpack.optimize.UglifyJsPlugin({              /*mini化,并进行treeShaking.  虽然这个treeShaking存在一个问题。不过目前我并没有一个好办法,也没那多时间了.

                                          babili-webpak-plugin虽然shaking掉了class,但文件大小好像并没变化。

                                          而rollup的treeShaking非常出色,最后得到的文件比webpack UglifyJsPlugin要小几十KB。可是这东西,不好用。:(

                                           */
                  compress:{warnings:true}
            })

          
          ]
}

  

 最后得到的main.bundle.js就是我们想要的主文件了。

0.chunk.js是child.module所对应的文件。

main.bundle.js 200~400KB 大小。比起不经过aot得到的mini文件(1MB多)小了很多。最后gz压缩,可以控制在100KB左右。最小可以50KB。

-----------------------------------

说说‘angular2-webpack2-lazy-children-loader’

  我们这样使用lazy loader:

loadChildren:‘ child.module#ChildModule‘

  可是aot编译后的文件名字成了child.module.ngfactory.ts,

  里面的变量成了ChildModuleNgFactory。所以为了生产模式,你需要改写成:

loadChildren:‘ child.module.ngfactory#ChildModuleNgFactory‘

  如果你手动更改了,那么,你可以继续使用‘angular-router-loader’在webpack中进行加载。

但使用‘angular2-webpack2-lazy-children-loader’在于,它会自动判断,并在加载时replace这段string。所以你,在生产或者开发模式都可写成你原本的格式了。

------------------------------

 可以下载尝试:https://github.com/zhantewei2/angular-aot-webpack

时间: 2024-10-23 07:42:56

angular2-aot-webpack 生产环境下编译angular2的相关文章

生产环境下ftp的迁移并构建高可用

说明:这是1个小项目就两台DELL的服务器,和一台IP SAN存储(DELL MD3200i).原来是4台小服务器,而且服务器太老了,经常有问题,这回相当于一次ftp的迁移,以前用的是proftp,这次换成了vsftp.数据量有2.5T. 拓扑很简单: 系统:CENTOS 6.4(64bit) 高可用软件:corosync+pacemaker host:ftp1 192.168.1.190 ftp2  192.168.1.191 stonith(ipmi):ftp1 192.168.1.180

读生产环境下go语言最佳实践有感

最近看了一篇关于go产品开发最佳实践的文章,go-in-procution.作者总结了他们在用go开发过程中的很多实际经验,我们很多其实也用到了,鉴于此,这里就简单的写写读后感,后续我也争取能将这篇文章翻译出来.后面我用soundcloud来指代原作者. 开发环境 在soundcloud,每个人使用一个独立的GOPATH,并且在GOPATH直接按照go规定的代码路径方式clone代码. $ mkdir -p $GOPATH/src/github.com/soundcloud $ cd $GOPA

在虚拟机linux环境下编译windows版adb fastboot

原文出自:http://blog.chinaunix.net/uid-20546441-id-1746200.html 我根据虚拟机编译遇到的问题进行一些添加 [前提条件] Linux Android源码完整 虚拟机磁盘空间100G左右(60G用来存放代码和编译后的文件) swap 30G左右,若太小会导致在编译后提示缺失文件 [具体步骤] 理论上,只要下一个windows版本的SDK,里面就自带了fastboot和adb工具. 但我最近确实遇到了一个需要在linux下编译出windows版本的

生产环境下的iptables

生产环境下的iptables设置,这是我自己的一点总结,浅显之处望大家指出批评,共同学习. 我的局域网为192.168.1.0/24. 1.先清空所有规则 iptables -F iptables -X iptables -Z iptables -t nat -F iptables -t nat -X iptables -t nat -Z 设置默认规则前开发ssh(6123)端口 iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --dport

【甘道夫】Win7x64环境下编译Apache Hadoop2.2.0的Eclipse插件

目标: 编译Apache Hadoop2.2.0在win7x64环境下的Eclipse插件 环境: win7x64家庭普通版 eclipse-jee-kepler-SR1-win32-x86_64.zip Apache Ant(TM) version 1.8.4 compiled on May 22 2012 java version "1.7.0_45" 参考文章: http://kangfoo.u.qiniudn.com/article/2013/12/build-hadoop2x

libCURL开源库在VS2010环境下编译安装,配置详解

libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 CURL开源库VS2010环境下编译安装,配置详解 一 准备 1.1 CURL官网下载地址:http://curl.haxx.se/download.html 1.2 找到源码包,我这里下载的是7.32.0版:http://curl.haxx.se/download/curl-7.32.0.zip 二 步骤 2.1 打开curl-7.32.0\

生产环境下was不允许重启,怎么办?

前段时间上线,遇到一个jndi的故障问题,怎么个问题呢?就是原在测试环境下没有问题,而在生产环境下无法连接生产数据库,当时找到问题所在,就是ibm工具自动生成一个在测试环境下连接的jndi的资源文件resources.xml,当时删除了,重启了server,无效.后来我考虑到这肯定是was缓存造成,因此想象缓存造成的原因,最后在测试环境下重启了was,问题解决了,但后来说生产环境是不可能重启was的,因此暂时困老了本人,后来所谓的领导说,他去找总架构师看有没有办法解决,可是时间不等人,过了2天依

在SoCEDS环境下编译和更新preloader和uboot程序的方法

在SoCEDS环境下编译和更新preloader和uboot程序的方法 前面有介绍preloader在HPS boot过程中的的作用,接下来讲述下用户在SoCEDS环境下改如何编译preloader和uboot程序!以及如何去更新BOOT SD卡中的preloader和uboot! 从Terasic网站下下载的SD image是在13.1环境下编译出来的preloader和u-boot,这里会在14.0环境下重新编译并更新到SD卡中!并在inux系统下更新preloader和u-boot到SD卡

[原]生产环境下的nginx.conf配置文件(多虚拟主机)

[原]生产环境下的nginx.conf配置文件(多虚拟主机) 2013-12-27阅读110 评论0 我的生产环境下的nginx.conf配置文件,做了虚拟主机设置的,大家可以根据需求更改,下载即可在自己的机器上使用了,本配置文件摘录自<构建高可用Linux服务器>(机械工业出版社),转载麻烦注明出处,谢谢,配置文件如下: user  www www;worker_processes 8;error_log  /data/logs/nginx_error.log  crit;pid