我正在用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模块的内置版本
我错误地认为,当节点需要包装时,它会查看 package.json 中的 module 键。无论如何,我已经待了几个小时,任何帮助都意味着很多欢呼?
答案 0 :(得分:2)
使用在rollup.config.js中指定format: 'es'
的情况下,已编译到ESModules的汇总。 Nodejs使用commonjs模块,并且require应当导入在那里找不到的commonjs模块,因此会出现错误。从节点版本10开始,Nodejs开始提供对ES模块的实验性支持。
如果您的节点版本大于10,则只需在package.json中更新快速服务器启动脚本即可允许实验模块支持,例如:"start": "node --experimental-modules server.js"
。
根据您的喜好或要求可以使用的其他方法:
@std/esm
来编译es模块并将其用作commonjs模块编辑:似乎上述有问题的代码在config中存在问题,并且已解决了该问题,package.json中的main和module条目被声明为其他方式,并且不得不交换条目进行设置他们正确地。 Main实际上应该指向umd,而module应该指向es模块。