经典的访谈主题是“ common.js和ES模块之间的差异”,许多人会熟练地记住答案。
ESM是JavaScript模块化的未来。由于它解决了可变污染,代码维护和代码依赖性的问题。它使您的代码更加科学。这就是为什么DENO默认使用ESM的原因。
返回主题,有任何方法可以直接在nodejs或浏览器中运行ESM代码,这是一个有趣而实用的问题。
最常见的方法是使用包装工具,例如带有Babel的Webpack。在WebPack和Vue的热量中,这些工具似乎是标准的,但是WebPack的缺点也很明显。它可以使commonj和ESM混合产生一些不规则的写作方法。我相信这种情况通常出现在商业代码中,并且存在于诸如ANTD3之类的第三部分组件库中。
汇总是根据ES6的语法规范编制的。它的轻巧和小型非常适合NPM库的包装。还可以编译和包装Esbuild和SWC等包装工具。即使速度越来越快,仍然需要编译过程。这些仓库的重要特征之一是使用ESM语法。
以上工具可以应用于ESM语法编译,但是许多项目不一定需要打包和编译这次 - 耗尽的过程,例如某些CLI工具,简单的微型服务等。如何确保高效且正确的运行ESM代码?
在Nodejs版本的较低版本中,我们可以使用一些工具。有几种形式的工具,一种是模块加载程序,另一个是命令行(称为CLI)。
模块加载程序,在这里我介绍标准界/ESM,这可以由预订第三方提供的第三方提供。从那时起,您就可以实现Babelless,Bundleles。您无需使用大型编译工具直接运行ESM代码。使用方式如下。
同样,在Esbuild的支持下,利用者/Esbuild-Register也可以实现模块加载器的效果。具有ESBuild的高性能特征,该代码运行更高。
命令行基于封装的CLI,只是预先的模块形式。BABEL节点使用其Babel语法优势运行ESM代码。由于JS仍然实现了Babel本身,其官方文档也表明它不是建议使用生产环境,这将导致高存储器职业。对于这种类型的工具,这也是一个常见的问题。
同样,ESNO可以直接在命令行上运行ESM代码。该原理基于Esbuild。此处建议此方法。鉴于通过GO语言实施Esbuild,它可以在很大程度上解决高内存职业的问题,从而确保某些执行绩效。
这种类型的第三方仓库适用于低转换nodejs和非生产环境。它们的存在是为了方便的,而不是实用性和稳定性。我如何有效地运行ESM代码?
节点Verison 13.2.0启动正式支持ES模块功能
因此,有必要使用本机Nodejs环境运行ESM代码。高版本的Nodejs提供了直接运行ESM的功能。建议使用LTS14版本。有两种运行ESM代码的方法:
首先,填写类型:package.json中的“模块”以指示模块的类型。直接运行后。
第二种类型是将文件名更改为,表明文件是ESM代码。这两种方法之间的最大区别是模块范围。前者是包装的范围,其语句基于包装。是基于文件,该文件不限于软件包的范围。
浏览器的情况与NodeJS环境不同,并且大多数新版本的浏览器支持ESM.ESM -level代码编译和包装的操作可以有效地降低包装的音量和资源传输速度。这就是为什么这就是为什么像Vite这样的框架使用现代浏览器包装模式(加上旧版兼容模式)。具体原则是,HTML中的脚本标签添加表明它引入了ESM代码。当旧浏览器无法支持ESM时,它将读取地址并读取与版本兼容的JS代码。这样,它可以有效地减少大多数浏览器加载的JS卷,并确保旧浏览器的兼容性。
现在,nodejs和浏览器环境可以对ESM语法具有良好的本机支持。作为前端工程师,我们应该维护前进的技术。在编写仓库时,我们需要考虑使用打字稿,esm或common.js?为什么我们不选择相对较新的JS操作环境,并欢迎JavaScript的第三个时代,并参考“ ESM Import and Bundleles”。
我们可以在2020年使用节点中的节点中的ES模块吗?