我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文致力于在纯正的nodejs环境下,运行具有es6特色的代码。在上一篇文章中,苏南大叔已经描述了在node环境下,运行import语句的最简单方式。那么,在本文中,苏南大叔对这些代码的执行方式,进行更加深入的整理探讨。那么,还是那句酸腐的话,“茴香豆的hui字到底有几种写法呢?”

苏南大叔:nodejs如何原生执行es6代码?支持import和export - nodejs-run-es6
nodejs如何原生执行es6代码?支持import和export(图7-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文描述,在纯正的nodejs环境(不夹杂浏览器下的js)下,如何运行es6 module的事情。本文测试环境:win10node@16.14.0babel-cli@6.26.0@babel/register@7.17.7

本文测试代码

importexport这对组合是nodejses6 module的一部分。所以,这里采用了上一篇文章中的代码做测试。具体参考下面的链接:

export function a () {
    console.log("a function")
}
import aa from './lib.js';   // lib.mjs
console.log(aa);

苏南大叔:nodejs如何原生执行es6代码?支持import和export - 流程走向
nodejs如何原生执行es6代码?支持import和export(图7-2)

方案一:都换成.mjs

这个方案在上一篇文章中,有所提及,具体的就是把文件名的后缀给换掉。当然,在import的时候,代码可能也需要带上后缀.mjs

苏南大叔:nodejs如何原生执行es6代码?支持import和export - mjs文件后缀
nodejs如何原生执行es6代码?支持import和export(图7-3)

除了这个方案里面,后缀是.mjs。那么,其它的方案里面,后缀都是.js

方案二:配置typemodule

如果项目下面,没有package.json文件,那么就新建一个,或者使用npm的初始化命令,一路回车即可。

npm init

这个package.json文件生成后,增加一条配置即可:

{
  "type": "module",
  "name": "001",
  "version": "1.0.0"
}

注意增加的是:"type": "module"

苏南大叔:nodejs如何原生执行es6代码?支持import和export - type-module
nodejs如何原生执行es6代码?支持import和export(图7-4)

增加这个字段后,项目内的所有文件就被识别成支持es6的了,并且并不需要再修改文件后缀.mjs了。直接执行命令即可:

node main.js

方案三:使用babel

大家都知道:nodejses6的支持,是一步一步推进的。那么,在这之前,就是用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

苏南大叔:nodejs如何原生执行es6代码?支持import和export - babelrc-main
nodejs如何原生执行es6代码?支持import和export(图7-5)

方案3.2 node -r @babel/register

这种情况下,还要额外安装一个babel-register

npm i @babel/register --save-dev

命令还使用node,增加了一个-r参数。例如:

node -r @babel/register main.js

苏南大叔:nodejs如何原生执行es6代码?支持import和export - babel-register
nodejs如何原生执行es6代码?支持import和export(图7-6)

方案3.3 require("@babel/register")

这种情况下,还要额外安装一个babel-register

npm i @babel/register --save-dev

对于main.js,需要再加个加载器文件。例如:

load_main.js

require("@babel/register");
require("./main.js");

苏南大叔:nodejs如何原生执行es6代码?支持import和export - register-node
nodejs如何原生执行es6代码?支持import和export(图7-7)

参考文献

总结

本文讲述在纯正的node环境下,运行es6特色代码的几种方案,下一篇文章中,苏南大叔再来描述在浏览器环境下,实现类似需求的方案。敬请期待。

助理微信

微信打赏码

微信公众号

微信小程序

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   node    babel