之前写的文章急速Js全栈教程得到了不错的阅读量,霸屏掘金头条3天,点赞过千,阅读近万,甚至还有人在评论区打广告,可见也是一个小小的生态了;)。看来和JS全栈有关的内容,还是有人颇有兴趣的。今天看到的霸屏的,也是讲全栈的,见参考文章7
接下来要写的是模块。JavaScript Module 真是很讨厌,但是不得不了解的话题。奇葩在于:
- 它一个非常老的语言,并且使用非常广泛
- 可是它很多年来也不支持模块。这得厂家当前是多大的心呢
- 再一个可是,它可以直接用现有的语言机制,实现自己的模块,这个就厉害了,因为它释放了社区的力量。事实证明,社区果然不可小看,这个年代,蚂蚁雄兵胜过大象的
- 再再一个但是,它的模块还可以有很多型的,这说的是分裂
- 这么多型的模块,还搞了各自独立的标准出来,这说的是整合
最近的ES2017,终于在前端也有了媲美后端的模块,但是大家并不准备把它用起来,很多人表示需要继续Webpack玩转ES6模块。
把ES6模块真用的起来,可以不在乎Webpack等打包工具带来的加载优化,各种小文件不必打包这点来说,我看还得加上HTTP/2的配合就好很多了。这也是文章将要介绍的一个主旨吧。ES6模块的引入,确实有可能对当前主流的打包模式有些影响,参考文章6内有所论述
文章自然也不少,但是写作此文的理由还是存在:
- 我还没有看到一个完整的全览,并且结合HTTP/2的更加没有看到。
- 而且,在我看来,即使有了ES6模块,也得了解和学习之前拼出来的各种模块,因为社区内的代码还大量的使用这样的模块,其中的一些设计模式,比如IIFE,也是值得一看的。
- 看到JS社区的热情和推动力,相信JS发展的未来是美好的
参考文章不少,其中模块历史和选型如下:
- 前端模块化开发那点历史
- 梳理的还是比较清晰
- 有点黑客精神的小伙伴,玩的很广谱
- 介绍Bower
- npm for Beginners: A Guide for Front-end Developers
- Es6module 出来了,是否应该重新考虑打包的方案?
- 前后端分离 Vue + NodeJS(Koa) + MongoDB,从产品到开发,全栈实践没有看过的,不妨去看看。
提到模块,也不得不提到各种模块依赖管理工具,也还有前端工程化的内容。一个前端组件,却常常提到可以使用npm安装此组件,可是npm是后端的nodejs领域的东西啊,所以,这样的提法是有些令人困惑的。比如为什么NPM作为后端模块的管理工具,前端也在使用它,有什么优点和缺点,可以在这里了解显示情况:npm、bower、jamjs 等包管理器,哪个比较好用?,还有这里npm and the front end,NPM官方也对npm在前端的使用,提出了自己的看法,捎带着,也有前端自动化,搜索词是 why a front end component install by npm,对于喜欢Google发现的人来说,这类词很有用 。
未来的文章的内容纲要:
- 最古老的模块加载<script>标签
- 此方法的若干问题
- 全局变量。全局命名污染和命名冲突
- 依赖管理。都需要HTML管理,而不是分层管理依赖,多文件加载次序非常关键
- 效率。太多HTTP请求,和并行加载效率低下
- 有问题引发的解决方法
- 命令空间,匿名闭包、依赖引入
- 当前主流的模块技术
- YUI方法,YUI Combo方法
- Nodejs的做法,Commonjs方案
- Nodejs借鉴,可以借鉴的(接口),不可以借鉴的(同步和异步)
- Require.js实践,AMD和CMD,依赖就近原则
- 从手写模块,到自动编译,Browerify,Webpack,Rollup
- 刚刚落地的模块技术
- ES6模块,官方发力,对现有技术的影响
- 弥补ES6问题,HTTP/2
- 最佳实践
写这篇文章,估计耗时2周左右。写预告的原因,是希望得到反馈,如果有些人支持的话,我就会写,如果大家兴趣缺缺,我也就不麻烦自己了。毕竟,自己搞懂是不必写作的,写了的话,就是希望可以讨论,可以得到反馈的。
可以通过点赞,来表明你的态度。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。