esm 本身出现就是为了 让web 模块化的, 结果 浏览器 esm 运行不了 import lodash from 'lodash ' 然后为了解决方案来了 browserify =>webpack , 然后问题又来了: node.js 本身 不支持esm 然后你们这样写 node.js 又得用babel转换! ( 语法不支持 esmify 转换), webpack |browserify 去打包,编译了.. 不然就没法运行 然后看了半天人家的打包配置: 把async 语法都编译成 node.js 低版本的东西了...(我不知道怎么禁用 ) 要调试怎么办 生成 .map 文件嘛 ;然后各种百度谷歌找配置方法。 浏览器和node.js 共同的解决方案:
- 采用目前的require , 浏览器中对代码做语法解析,采用ast 语法 搜寻出 require("module") ;然后按一定的规则预先加载所需模块,这样是个好解决方法。 (语法解析有var 变量提前定义, 以及eval 语法分析, 再加require 语法分析是一个可行方案。)
- 这种方法 不会因为 require 加载模块而导致js 阻塞。而对于没有加载到的动态模块,可以采用用配置文件并预先加载到缓存,不执行模块内容;
- 语法一致性