Open hjin-me opened 9 years ago
前端组件化,是个坑。自己想尝试挑战一下这个方向,记录一下自己想的内容。
因为前端本身没有组件化的解决方案(Shadow DOM 路还很长),所以必然依赖于预处理器和后处理器将按照某种规范编写的代码处理成为低耦合无冲突可复用的组件代码。
JS 模块化已经有很多成熟的方案,CommonJS/AMD/ES6 Module。向前看,个人偏向于使用 ES6 Module。
当然还有其他的,例如 angular 1.x 自带模块系统,但是没有加载器
HTML 就是一段字符串,并且可以重复使用。加上特定 class 或自定义 tag ,直接以字符串形式混入 JS 即可。
CSS 是全局性的,需要引入命名空间来避免 CSS 样式覆盖。目前 less stylus sass 等都支持 nested 方式书写 CSS 来通过选择器来隔离。
HTML/CSS/JS 都可能引用其他静态资源,如图片,字体等。这类资源需要提供两种访问方式
AngularJS + UIRouter
单页面解决方案,MVVM 的 AngularJS 提高生产效率。丰富的社区文档和错误信息是其优势。同时 AngularJS 自身提供了 JS 的模块化方案,directive 也能很好的封装 UI 组件(HTML/JS部分)
HTML + Less + Typescript
Less 亲近 CSS 的预编译语言,不给开发者带来额外的学习成本。同时支持 Nested 风格编码,用于解决命名空间的问题。
Typescript 支持 ES6 部分特型,引入类型系统在一定程度上可以避免一些 213 的编码错误。提供了简洁 ///<reference path=''/> 的文件拼接方案,与 AngularJS 的模块系统不会引起冲突。
///<reference path=''/>
目前已经基于 FIS3 实现了一个初版,感觉不太理想。未来计划基于 Webpack 定制一套打包编译流程。
目前的想法就是,一个目录就是一个组件(对应 AngularJS 的 directive),相同文件名的 html/ts/less 相互依赖。
编译流程
/// <reference path=''/>
PS.
先试试看,踩到坑了再看看怎么办
前端组件化,是个坑。自己想尝试挑战一下这个方向,记录一下自己想的内容。
因为前端本身没有组件化的解决方案(Shadow DOM 路还很长),所以必然依赖于预处理器和后处理器将按照某种规范编写的代码处理成为低耦合无冲突可复用的组件代码。
JS 模块化
JS 模块化已经有很多成熟的方案,CommonJS/AMD/ES6 Module。向前看,个人偏向于使用 ES6 Module。
当然还有其他的,例如 angular 1.x 自带模块系统,但是没有加载器
HTML 模块化
HTML 就是一段字符串,并且可以重复使用。加上特定 class 或自定义 tag ,直接以字符串形式混入 JS 即可。
CSS 模块化
CSS 是全局性的,需要引入命名空间来避免 CSS 样式覆盖。目前 less stylus sass 等都支持 nested 方式书写 CSS 来通过选择器来隔离。
其他静态资源
HTML/CSS/JS 都可能引用其他静态资源,如图片,字体等。这类资源需要提供两种访问方式
JS/HTML/CSS 组件化方案
方案选择的原则
基础框架
AngularJS + UIRouter
单页面解决方案,MVVM 的 AngularJS 提高生产效率。丰富的社区文档和错误信息是其优势。同时 AngularJS 自身提供了 JS 的模块化方案,directive 也能很好的封装 UI 组件(HTML/JS部分)
语言选择
HTML + Less + Typescript
Less 亲近 CSS 的预编译语言,不给开发者带来额外的学习成本。同时支持 Nested 风格编码,用于解决命名空间的问题。
Typescript 支持 ES6 部分特型,引入类型系统在一定程度上可以避免一些 213 的编码错误。提供了简洁
///<reference path=''/>
的文件拼接方案,与 AngularJS 的模块系统不会引起冲突。预编译/后处理工具
目前已经基于 FIS3 实现了一个初版,感觉不太理想。未来计划基于 Webpack 定制一套打包编译流程。
目前的想法就是,一个目录就是一个组件(对应 AngularJS 的 directive),相同文件名的 html/ts/less 相互依赖。
编译流程
/// <reference path=''/>
生成 All In One 的 js 文件编码约定
PS.
先试试看,踩到坑了再看看怎么办