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

Posted suedarsam

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了介绍一个自制的适配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了吗

以上是关于介绍一个自制的适配ESM在node 环境中的工具 -- uunode的主要内容,如果未能解决你的问题,请参考以下文章

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

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

在Node / Electron环境中共享ESM“.js”模块

cocos2d-x自制工具09:复活!x2屏幕适配方案

esm的学习

青训营Node.js基础 - 特点 - 模块化CommonJS&ESM - npm包管理