该篇主要是结合刚发布不久的webpack4,搭建一个非cli的angular5的脚手架demo,主要分为以下几个方面阐述下脚手架结构:

# 脚手架基础架构(根据angular5的新规范)


/**
* 脚手架结构
*
*/
—— 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模块,该目录下包含该模块的视图、控制器以及模块路由配置等文件。

app-routing.module.ts:项目的根路由模块

app.component.html:应用引导启动视图

app.module.ts: 应用根模块

index.html:应用加载页

main.ts:angular入口文件

polyfills.ts:汇总一些兼容库文件

tsconfig.ts:typescript的配置文件

vendor_ng.ts:第三方资源文件汇总

另外,在开发环境中引入了一个可视化的打包插件webpack-bundle-analyzer,用于在浏览器界面查看最终的bundlejs所包含的所有资源结构,效果如下图所示,可以清晰的监控打包的资源,以防引入冗余文件。配置语法可参见webpack.dev.js文件。

# 遇到的问题:

1、如果是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





一个纯净的webpack4+angular5脚手架的更多相关文章

  1. 【webpack系列】从零搭建 webpack4+react 脚手架(四)

    经过三个章节的学习,你已经学会搭建了一个基于webpack4的react脚手架.如果要更改配置,比如,你希望把编译后的js文件和css文件等单独放dist下的static目录下,你想想,是不是有点麻烦 ...

  2. 【webpack系列】从零搭建 webpack4+react 脚手架(三)

    本章节,我们对如何在脚手架中引入CSS,如何压缩CSS,如何使用CSS Modules,如何使用less,如何使用postcss等问题进行展开学习. 1 支持css (1)在app目录,新建一个css ...

  3. 【webpack系列】从零搭建 webpack4+react 脚手架(一)

    搭建一个React工程的方式有很多,官方也有自己的脚手架,如果你和我一样,喜欢刨根究底,从零开始自己一行一行代码创建一个React脚手架项目,那你就来对地方了.本教程是针对React新手,以及对web ...

  4. 【webpack系列】从零搭建 webpack4+react 脚手架(二)

    html文件如何也同步到dist目录?bundle.js文件修改了,万一被浏览器缓存了怎么办?如何为导出的文件加md5?如何把js引用自动添加到html?非业务代码和业务代码如何分开打包?如何搭建开发 ...

  5. 如何用vue-cli3脚手架搭建一个基于ts的基础脚手架

    目录 准备工作 搭建项目 vue 中 ts 语法 项目代理及 webpack 性能优化 其他 忙里偷闲,整理了一下关于如何借助 vue-cli3 搭建 ts + 装饰器 的脚手架,并如何自定义 web ...

  6. 【AMAD】cookiecutter-django -- 是一个构建Django项目的脚手架工具

    动机 简介 个人评分 动机 Django内置的命令django-admin startproject其实并不好用,在你上线之前八成已经把它改的面目全非了. 简介 cookiecutter-django ...

  7. 【转】Jsduck一个纯净的前端文档生成神器

    让前端程序更具可维护性,是一个老生常谈的问题,大多数时候我们都关注于应用层面的代码可维护性,如:OO.模块化.MVC,编码规范.可扩展和复用性,但这都是属于设计层面需要考虑的事情,可维护性还应包含另一 ...

  8. 【webpack系列】从零搭建 webpack4+react 脚手架(五)

    本章节,我们一起来探讨以下问题:如何对编译后的文件进行gzip压缩,如何让开发环境的控制台输出更加高逼格,如何更好的对编译后的文件进行bundle分析等. 1 gzip压缩 如果你想节省带宽提高网站速 ...

  9. 快速新建一个纯净的java pom项目 project

    前期的java环境安装就不再阐述了使用步骤java -jar project-creator-0.1.jar projectName [war] 1> 比如你要创建一个项目名字叫 smile-o ...

随机推荐

  1. 一个新人对HTML的理解

    首先 HTML里面包含的东西是什么? 在HTML里面   注释的表示方式是    <!--注释内容--> 注释 HTML初始默认包含了两大部分: 一部分是 <head>< ...

  2. thinkphp 隐藏表单验证原理

    function savetoken() //创建session('hash') ,然后在魔板中表单中加入隐藏域 getsession('hash'),提交表单验证值是否一样,如果一样验证通过,同时重 ...

  3. Python3 socketserver模块

    socketserver(在Python2.*中的是SocketServer模块)是标准库中一个高级别的模块.用于简化网络客户与服务器的实现(在前面使用socket的过程中,我们先设置了socket的 ...

  4. Atcoder Tenka1 Programmer Contest 2019 D Three Colors

    题意: 有\(n\)个石头,每个石头有权值,可以给它们染'R', 'G', 'B'三种颜色,如下定义一种染色方案为合法方案: 所有石头都染上了一种颜色 令\(R, G, B\)为染了'R', 染了'G ...

  5. RocketMQ 2主2从 集群搭建

    安装环境 jdk1.7 alibaba-rocketmq-3.2.6.tar.gz VM虚拟机redhat6.5-x64:192.168.1.201  192.168.1.202 192.168.1. ...

  6. 启动Tomcat服务时,出现org.apache.catalina.startup.VersionLoggerListener报错

    启动Tomcat服务时,出现org.apache.catalina.startup.VersionLoggerListener报错解决办法:打开Tomcat安装后目录,进入conf文件夹,找到配置文件 ...

  7. GD32芯片移植完全攻略

    GD32是国产兆易创新公司生产的完全兼容STM32系列的Cortex-M3处理器,具有几大亮点:1,高主频108MHz.性能提升30%以上,可超频到120MHz2,Flash零等待.STM32的72M ...

  8. 判断一个String中是否有指定字符或字符串

    String test=“qwer”; if (test.contains("个we")){ do; }

  9. 【前端】javascript实现鼠标跟随特效

    实现效果: 实现代码: <!DOCTYPE html> <html> <head> <title>鼠标跟随</title> <meta ...

  10. Python3基础 __add__,__sub__ 两个类的实例相互加减

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...