node . js怎么处理ES6模块

  介绍

这篇文章将为大家详细讲解有关节点。js怎么处理ES6模块,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、两种模块的差异

ES6模块和CommonJS模块有很大的差异。

语法上面,CommonJS模块使用需要()加载和模块。输出口出,ES6模块使用进口和出口。

用法上面,需要()是同步加载,后面的代码必须等待这个命令执行完,才会执行。进口命令则是异步加载,或者更准确地说,ES6模块有一个独立的静态解析阶段,依赖关系的分析是在那个阶段完成的,最底层的模块第一个执行。

二、节点。js的区分

节点。js要求ES6模块采用.mjs后缀文件名。也就是说,只要脚本文件里面使用进口或出口命者令,那么就必须采用.mjs后缀名.Node。js遇到。乔丹文件,就认为它是ES6模块,默认启用严格模式,不必在每个模块文件顶部指定“使用strict"。

如果不希望将后缀名改成.mjs,可以在项目的包。json文件中,指定类型字段为模块。

{   ,才能“type":,“module"   }

一旦设置了以后,该目录里面的JS脚本,就被解释用ES6模块。

#解释成ES6模块

节点app美元。js

如果这时还要使用CommonJS模块,那么需要将CommonJS脚本的后缀名都改成.cjs。如果没有类型字段,或者类型字段为CommonJS,则。js脚本会被解释成CommonJS模块。

总结为一句话:。乔丹文件总是以ES6模块加载,。cj文件总是以CommonJS模块加载,js文件的加载取决于包中。json里面类型字段的设置。

注意,ES6模块与CommonJS模块尽量不要混用.require命令不能加载.mjs文件,会报错,只有进口命令才可以加载.mjs文件。反过来,。乔丹文件里面也不能使用需要命令,必须使用导入。

三,CommonJS模块加载ES6模块

CommonJS的需要()命令不能加载ES6模块,会报错,只能使用进口()这个方法加载。

(async (),=祝辞,{   await 才能进口(& # 39;。/my-app.mjs& # 39;);   })();

上面代码可以在CommonJS模块中运行。

()不需要支持ES6模块的一个原因是,它是同步加载,而ES6模块内部可以使用顶层等待命令,导致无法被同步加载。

四,ES6模块加载CommonJS模块

ES6模块的进口命令可以加载CommonJS模块,但是只能整体加载,不能只加载单一的输出项。

//,正确   import  packageMain 得到& # 39;commonjs-package& # 39;;//,报的错   {},method  import 得到& # 39;commonjs-package& # 39;;

这是因为ES6模块需要支持静态代码分析,而CommonJS模块的输出接口是模块。出口,是一个对象,无法被静态分析,所以只能整体加载。

加载单一的输出项,可以写成下面这样。

import  packageMain 得到& # 39;commonjs-package& # 39;;   {const  method },=, packageMain;

五,同时支持两种格式的模块

一个模块同时要支持CommonJS和ES6两种格式,也很容易。

如果原始模块是ES6格式,那么需要给出一个整体输出接口,比如出口默认obj,使得CommonJS可以用进口()进行加载。

如果原始模块是CommonJS格式,那么可以加一个包装层。

import  cjsModule 得到& # 39;. ./index.js& # 39;;   时间=export  const  foo  cjsModule.foo;

上面代码先整体输入CommonJS模块,然后再根据需要输出具名接口。

你可以把这个文件的后缀名改为.mjs,或者将它放在一个子目录,再在这个子目录里面放一个单独的包。json文件,指明{类型:“module"}.

另一种做法是在包中。json文件的出口字段,指明两种格式模块各自的加载入口。

“exports": {,   ,,,“require",:,“,/index.js"   ,,,“import":,“。/esm/wrapper.js",   }

上面代码指定()和进口,需要加载该模块会自动切换到不一样的入口文件。

关于“node . js怎么处理ES6模块”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看的到。

node . js怎么处理ES6模块