介绍一个自制的适配ESM在node 环境中的工具 — uunode

  • Post author:
  • Post category:其他




一、概述

先看一段

代码

// index.js
import createMathOperation from './.internal/createMathOperation.js'

const add = createMathOperation((augend, addend) => augend + addend, 0)

console.log(add(6, 4));

export default add

当我们在终端执行

node index.js

时,我们可以得到一个报错:

在这里插入图片描述

也就是说,我们不可以直接运行这段包含

ESM

的代码。


Node verison 13.2.0

起开始正式支持

ES Modules

特性,有两种方法可以应用:



  1. package.json

    中设置

    "type": "module"
  2. 将文件后缀改变为

    mjs

第一种方法使用过

single-spa

的同学应该觉得眼熟,

single-spa

采用第一个方法导入子模块。

根据第二个方法,为了便利化

调试

,我开发了一个命令行工具——

uunode

,它会将

js

文件在不覆盖原文件的情况下转化为

mjs

, 并执行相应的

mjs

文件,并返回结果。



二、安装


npm

使用:

npm install uunode -g


yarn

使用:

yarn add uunode -g

(

linux

显示没有权限的话请在前面加上 sudo, 即

sudo npm install uunode -g

或者

sudo yarn add uunode -g

)



三、使用示例

uunode [example.js]

在这里插入图片描述

如示例所示,当我们运行

uunode [example.js]

时,它会产生一个

.uunode

的文件夹,里面储存着将

mjs

文件(默认不保留文件,你可以加

-k

参数保留文件)。并执行

node .uunode/example.js

返回相应的结果。

你还可以使用

uunode [example.js] -s

去掉

console

参数支持项:

参数值 含义
-s 去除

console
-k 保留生产后的菜单



四、未来

在探索如何写

uunode

的过程中发现了

Deno

,也是由

nodejs

的作者

Ryan Dahl

开发的。


node

不能处理

ESM

模块的问题,将在

Deno

解决。更多关于 deno 的内容,请参考

这篇

文章。



五、更多


  1. 手把手教你写Node.js命令行程序


  2. 如何从零开始开发一个 node.js 命令行(cli)工具


  3. 什么是amd、commonjs、umd、esm?


  4. 2020年我们可以在Node中使用ES Modules了吗



版权声明:本文为suedar1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。