-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Node 9下import/export的丝般顺滑使用 #24
Comments
我的天,各种url 绕来绕去 |
|
👍 |
我记得koa2现阶段是不支持import引入的又或者是在inexjs启动文件中不支持。 |
不是koa2 不支持import,而是你的node 需要开启这个支持才行。 |
这个运行之后不会报错吗 TypeError [ERR_INVALID_URL]: Invalid URL: [object Object] |
@xiaohuaxiangwoyiyang 您好,这个文章是3年前写的,Node已经支持原生ES module使用了,不需要原来实验中的方法哈。 ExperimentalWarning: --experimental-loader is an experimental feature. This feature could change at any time |
前言
Node 9最激动人心的是提供了在flag模式下使用
ECMAScript Modules
,虽然现在还是Stability: 1 - Experimental
阶段,但是可以让Noder抛掉babel等工具的束缚,直接在Node环境下愉快地去玩耍import/export
如果觉得文字太多,看不下去,可以直接去玩玩demo,地址是https://github.com/chenshenhai/node-modules-demo
Node 9下import/export使用简单须知
import/export
的文件后缀名必须为*.mjs
(下面会讲利用Loader Hooks兼容*.js
后缀文件)--experimental-modules
import
和export
必须严格按照ECMAScript Modules
语法ECMAScript Modules
和require()
的cache机制不一样快速使用import/export
mod-1.mjs
,mod-2.mjs
文件index.mjs
控制台会显示
使用简述
执行了上述demo后,快速体验了Node的原生
import/export
能力,那我们来讲讲目前的支持状况,Node 9.x官方文档 https://nodejs.org/dist/latest-v9.x/docs/api/esm.html与require()区别
import A from './a?v=2017'
*.js
,*.json
等直接支持*.mjs
,通过Loader Hooks
可以自定义配置规则支持*.js
,*.json
等Node原有支持文件Loader Hooks模式使用
Loader Hooks 使用步骤
node --experimental-modules --loader ./custom-loader.mjs ./index.js
如果觉得以下文字太长,可以先去玩玩对应的demo3 https://github.com/chenshenhai/node-modules-demo/tree/master/demo3
自定义规则快速上手
import/export
的*.js
文件自定义loader规则解析
以下是Node 9.2官方文档提供的一个自定义loader文件
规则总结
在自定义loader中,export的resolve规则最核心的代码是
esm
,cjs
,json
,builtin
,addon
这四种模块/文件格式.Koa2 直接使用import/export
看看demo4,https://github.com/chenshenhai/node-modules-demo/tree/master/demo4
代码片段太多,不一一贴出来,只显示主文件
自定义loader规则优化
从上面官方提供的自定义loader例子看出,只是对
*.js
文件做import/export
做loader兼容,然而我们在实际开发中需要对npm模块,*.json
文件也使用import/export
loader规则优化解析
后记
目前Node对
import/export
的支持现在还是Stability: 1 - Experimental
阶段,后续的发展还有很多不确定因素,自己练手玩玩还可以,但是在还没去flag使用之前,尽量不要在生产环境中使用。The text was updated successfully, but these errors were encountered: