所在的位置: Web开发 >> CSSDIV >> 在Nodejs中ESModule

在Nodejs中ESModule

北京治疗白癜风最好方法 http://m.39.net/pf/a_4601411.html

本周-05-26,Nodejsv12.17.0LTS版发布,去掉--experimental-modules标志。

虽然已在最新的LTSv12.17.0中支持,但是目前仍处于Stability:1-Experimental实验阶段,如果是在生产环境使用该功能,还应保持谨慎,如果在测试环境可以安装ninstallv12.17.0进行尝试。

删除标志也是将ESM变为稳定性而迈出的重要一步,根据Nodejs官方的发布说明,有望在今年下半年(10月左右)删除Nodejs12中的警告,届时Node14将会成为LTS。

ESModules基本使用

通过声明.mjs后缀的文件或在package.json里指定type为module两种方式使用ESModules,下面分别看下两种的使用方式:

使用方式一

构建如下目录结构

├──caculator.js├──index.js└──package.json

package.json

重点是将type设置为module来支持ESModules

{"name":"esm-project","version":"1.0.0","main":"index.js","type":"module",...}

caculator.js

exportfunctionadd(a,b){returna+b;};

index.js

import{add}from./caculator.js;console.log(add(4,2));//6

运行

与当前的v14.3.0不同的是在v12.17.0中使用ESM运行时仍然会触发一个experimental警告信息。

nrunv12.17.0index.js(node:)ExperimentalWarning:TheESMmoduleloaderisexperimental.6nrunv14.3.0index.js6使用方式二

通过指定文件扩展名为.mjs与CommonJS模块进行区分,这样是不需要在package.json中指定type为module。

在上述例子基础上修改文件扩展名即可。

├──caculator.mjs├──index.mjs

运行

nrunv12.17.0index.mjs(node:)ExperimentalWarning:TheESMmoduleloaderisexperimental.6模块导入导出的几种方式export导出

export用于对外输出模块,可导出常量、函数、文件等,相当于定义了对外的接口,两种导出方式:

export:使用export方式导出的,导入时要加上{}需预先知道要加载的变量名,在一个文件中可以使用多次。exportdefault:为模块指定默认输出,这样加载时就不需要知道所加载的模块变量名,一个文件中仅可使用一次。

//caculator.jsexportfunctionadd(a,b){returna+b;};exportfunctionsubtract(a,b){returna-b;}constcaculator={add,subtract,}exportdefaultcaculator;import导入

import语句用于导入另一个模块导出的绑定,三种导入方式:

导入默认值:导入在exportdefault定义的默认接口。as别名导入:在导入时可以重命名在export中定义的接口。单个或多个导入:根据需要导入export定一个的一个或多个接口。

import{add}from./caculator.js;importcaculatorfrom./caculator.js;import*ascaculatorAsfrom./caculator.js;add(4,2)caculator.subtract(4,2);caculatorAs.subtract(4,2);import的动态导入

可以像调用函数一样动态的导入模块,它将返回一个Promise,但是这种方式需要Top-Levelawait支持,如果你不知道Top-Levelawait是什么可以看下这篇文章Nodejsv14.3.0发布支持顶级Await和REPL增强功能。

现在我们有如下导出模块my-module.js:

constsleep=(value,ms)=newPromise(resolve=setTimeout(()=resolve(value),ms));exportconsthello=awaitsleep(Hello,);exportconstnode=awaitsleep(Nodejs,);exportdefaultfunction(){returnthisisamodule;}

在index.js中可以像如下形式进行动态导入:

console.log(Startloadingmodule...)constmyModule=awaitimport(./my-module.js);console.log(Outputafterms.)console.log(myModule.hello);console.log(myModule.node);console.log(myModule.default());

运行

nrunv14.3.0--experimental_top_level_awaitindex.jsStartloadingmodule...Outputafterms.HelloNodejsthisisamodule

本周Nodejsv12.17.0LTS版发布,在这之前如果我们使用ESModules还需要加上标志--experimental-modules,而在本次版本发布取消了这个标志,本文也是对在Nodejs中使用ESModules进行了入门讲解,后续也会进行更深入的研究分享,希望看完你能有所收获。

Referencenodejs.org/en/blog/release/v12.17.0/nodejs.org/dist/latest-v14.x/docs/api/esm.html

作者简介:五月君,NodejsDeveloper,慕课网认证作者,热爱技术、喜欢分享的90后青年,欢迎


转载请注明:http://www.guyukameng.com/cssdiv/cssdiv/13820.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了