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
特色代码的几种方案,下一篇文章中,苏南大叔再来描述在浏览器环境下,实现类似需求的方案。敬请期待。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。