如何在我的npm包中同时允许导入ES5和ES6?

3

我刚开始接触npmjs包发布并且最近成功地发布了我的第一个包。但是由于它采用的是ES5风格,所以只能通过“require”方式访问。

const smiley = require('smiley-id');

如何使其可以通过导入语句进行访问,就像这样

import smiley from 'smiley-id'; 

或/与
import { smileyId } from 'smiley-id';

没有所谓的“ES5”风格。那些是NodeJS模块。 - Jared Smith
https://nodejs.org/api/packages.html拥有您需要的所有信息。另外,请参考https://2ality.com/2019/10/hybrid-npm-packages.html。 - Bergi
可能是 https://dev59.com/B1IG5IYBdhLWcg3wvELW 的重复问题。 - Bergi
1个回答

3

require是CommonJS模块系统的一部分(也称为cjs模块),而importexport用于es2015模块系统(也称为JavaScript模块,es6模块或esm模块)。

您可以同时使用import导入cjs和esm模块,但不能使用require导入esm模块。这意味着在esm模块(或您将使用TypeScript tsc编译或使用Babel打包的源文件)中,您可以使用import直接导入您的软件包。但是,您无法使用命名导入。相反,您必须在导入项目后解构。

如果您想将其作为esm软件包分发,这也是可能的,并且具有某些优点,其中最重要的与树摇有关。要将其作为esm模块分发,您需要告诉构建工具输出esm模块。这对于不同的工具是不同的。例如,对于tsc,您需要指定--module es6(有多个目标输出esm模块)。对于Webpack、Babel和Rollup,操作不同。


感谢@fast-reflexes的帮助。我会将我的模块更新为ES6。 - Ajay Agrawal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接