nodejs如何原生执行es6代码?支持import和export
发布于 作者:苏南大叔 来源:程序如此灵动~
本文致力于在纯正的nodejs环境下,运行具有es6特色的代码。在上一篇文章中,苏南大叔已经描述了在node环境下,运行import语句的最简单方式。那么,在本文中,苏南大叔对这些代码的执行方式,进行更加深入的整理探讨。那么,还是那句酸腐的话,“茴香豆的hui字到底有几种写法呢?”

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文描述,在纯正的nodejs环境(不夹杂浏览器下的js)下,如何运行es6 module的事情。本文测试环境:win10,node@16.14.0,babel-cli@6.26.0,@babel/register@7.17.7。
本文测试代码
import和export这对组合是nodejs的es6 module的一部分。所以,这里采用了上一篇文章中的代码做测试。具体参考下面的链接:
export function a () {
console.log("a function")
}import aa from './lib.js'; // lib.mjs
console.log(aa);
方案一:都换成.mjs
这个方案在上一篇文章中,有所提及,具体的就是把文件名的后缀给换掉。当然,在import的时候,代码可能也需要带上后缀.mjs。

除了这个方案里面,后缀是.mjs。那么,其它的方案里面,后缀都是.js。
方案二:配置type为module
如果项目下面,没有package.json文件,那么就新建一个,或者使用npm的初始化命令,一路回车即可。
npm init这个package.json文件生成后,增加一条配置即可:
{
"type": "module",
"name": "001",
"version": "1.0.0"
}注意增加的是:"type": "module"。

增加这个字段后,项目内的所有文件就被识别成支持es6的了,并且并不需要再修改文件后缀.mjs了。直接执行命令即可:
node main.js方案三:使用babel
大家都知道:nodejs对es6的支持,是一步一步推进的。那么,在这之前,就是用babel来做相关转化的。所以,关于babel的事情,是一时一个观点。总归有一天,babel是要被彻底取代的。
需要安装babel-cli等系列依赖:
npm i babel-cli @babel/preset-env --save-dev然后在根目录下面新建文件.babelrc,里面写入下面的配置:
{
"presets": ["@babel/preset-env"]
}这里的配置内容,也是一时一个变化,您看文章的时候,请根据实际情况更新。
方案3.1 babel-node
这种情况下,使用babel-node命令代替node,就可以执行es6 module了。
babel-node main.js
方案3.2 node -r @babel/register
这种情况下,还要额外安装一个babel-register。
npm i @babel/register --save-dev命令还使用node,增加了一个-r参数。例如:
node -r @babel/register main.js
方案3.3 require("@babel/register")
这种情况下,还要额外安装一个babel-register。
npm i @babel/register --save-dev对于main.js,需要再加个加载器文件。例如:
load_main.js:
require("@babel/register");
require("./main.js");
参考文献
- https://newsn.net/say/react-babel.html
- https://newsn.net/say/vscode-electron-debug-es6-babel-cli.html
- https://newsn.net/say/vscode-electron-debug-es6-babel-register.html
总结
本文讲述在纯正的node环境下,运行es6特色代码的几种方案,下一篇文章中,苏南大叔再来描述在浏览器环境下,实现类似需求的方案。敬请期待。