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

一、概述

先看一段代码

// 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了吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值