该篇主要是结合刚发布不久的webpack4,搭建一个非cli的angular5的脚手架demo,主要分为如下几个方面阐述下脚手架结构:javascript
/** * 脚手架结构 * */ —— src |—— app —— about —— index |—— app-rouing.module.ts |—— app.component.css |—— app.component.html |—— app.component.ts |—— app.module.ts |—— index.html |—— main.ts |—— polyfills.ts |—— styles.css |—— tsconfig.json |—— vendor_ng.ts —— package.json —— webpack.dev.js —— webpack.pro.js
该脚手架的模块划分遵循angular-cli规范,业务代码统一放在了根目录src下,about和index是两个脚手架的demo模块,该目录下包含该模块的视图、控制器以及模块路由配置等文件。css
app-routing.module.ts:项目的根路由模块html
app.component.html:应用引导启动视图java
app.module.ts: 应用根模块webpack
index.html:应用加载页git
main.ts:angular入口文件github
polyfills.ts:汇总一些兼容库文件web
tsconfig.ts:typescript的配置文件typescript
vendor_ng.ts:第三方资源文件汇总json
另外,在开发环境中引入了一个可视化的打包插件webpack-bundle-analyzer,用于在浏览器界面查看最终的bundlejs所包含的全部资源结构,效果以下图所示,能够清晰的监控打包的资源,以防引入冗余文件。配置语法可参见webpack.dev.js文件。
一、若是是ng5+的话,因为删除了相对路径的指南模块,因此可能会出现如下报错:zone.js:665 Unhandled Promise rejection: Failed to load app.component.html ; Zone: <root> ; Task: Promise.then ; Value: Failed to load app.component.html
解决方案及why可参考如下资料,这里就不详述
* relative-template-and-style-urls-using-system-js-without-moduleid-in-angular-2-4-9
* component-relative-paths-in-angular
* angular变动日志angular change-log
脚手架中暂且用的是webpack的引入方式来解决该问题,当感受有点怪怪的,期待交流!
提高部分还有无感知刷新功能,以实现提高开发环境效率,但该功能还未加到脚手架里,打算用官方推荐的webpack-hot-middleware + webpack-dev-middleware双剑插件实现实时热替换功能,有更好方式的朋友能够交流下。
脚手架github地址:angular-scaffold demo