使NPM软件包可用于ES6和ECMAScript

时间:2020-07-05 14:42:21

标签: javascript node.js npm package.json

我正在用TypeScript制作NPM软件包,并想知道如何使它可用于ES和Node模块。

我已经使用汇总和一些配置对其进行了设置:

rollup.config.js

export default {
    input: 'build/kimp.js', // built from TS
    output: [
        {
            file: 'dist/main/kimp.js',
            format: 'es',
            strict: false,
            name: 'module',
            banner: `#! /usr/bin/env node - Copyright 2020 Herbie Vine - Updated: ${new Date()}`
        },
        {
            file: 'dist/module/kimp.js',
            format: 'umd',
            strict: false,
            name: 'common',
            banner: `#! /usr/bin/env node - Copyright 2020 Herbie Vine - Updated: ${new Date()}`
        }
    ],
    plugins: [
        terser(),
        resolve(),
        json(),
        commonjs({
            include: 'node_modules/**'
        })
    ],
    external: [
        'crypto'
    ]
};

package.json

{
    "name": "kimp",
    "version": "1.0.0",
    "description": "Lightweight ID generator",
    "sideEffects": false,
    "main": "dist/main/kimp.js", // import() - es6
    "module": "dist/module/kimp.js", // require() - node
    "scripts": {
        "build": "tsc -p ./src/tsconfig.json",
        "rollup": "rollup -c"
    },
    "publishConfig": {
        "registry": "https://npm.pkg.github.com/"
    },
    "keywords": [...],
    "repository": {...},
    "author": "Herbie Vine",
    "license": "MIT",
    "bugs": {...},
    "homepage": "https://github.com/herbievine/kimp#readme",
    "devDependencies": {...}
}

我尝试在快速应用中使用它,但出现错误:

const { kimp } = require('kimp');
console.log(kimp)
------
C:\Users\**\kimp-ts\dist\main\kimp.js:3484
export { kimp };
^^^^^^

这来自es模块的内置版本

basic gist on github

我错误地认为,当节点需要包装时,它会查看 package.json 中的 module 键。无论如何,我已经待了几个小时,任何帮助都意味着很多欢呼?

1 个答案:

答案 0 :(得分:2)

使用在rollup.config.js中指定format: 'es'的情况下,已编译到ESModules的汇总。 Nodejs使用commonjs模块,并且require应当导入在那里找不到的commonjs模块,因此会出现错误。从节点版本10开始,Nodejs开始提供对ES模块的实验性支持。 如果您的节点版本大于10,则只需在package.json中更新快速服务器启动脚本即可允许实验模块支持,例如:"start": "node --experimental-modules server.js"

根据您的喜好或要求可以使用的其他方法:

  1. 使用第三方@std/esm来编译es模块并将其用作commonjs模块
  2. 通过此汇总plugin
  3. 在commonjs模块中编译您的库

编辑:似乎上述有问题的代码在config中存在问题,并且已解决了该问题,package.json中的main和module条目被声明为其他方式,并且不得不交换条目进行设置他们正确地。 Main实际上应该指向umd,而module应该指向es模块。