记一次报错记录
字面意思: 使用require()导入了一个ESM模块
但代码里明明使用的是import ESM的语法进行导入的,并未存在require();
错误场景:
代码:
import ora from 'ora';
import chalk from 'chalk';
async function spinner(text = '执行中') {
const instance = (await ora)(text).start();
return {
succeed: async (text = '执行成功') => {
instance.text = chalk.greenBright(text);
instance.succeed();
},
fail: async (text = '执行失败') => {
instance.text = chalk.redBright(text);
instance.fail();
},
};
};
export default spinner
tsconfig.json
{
"extends": "@eggjs/tsconfig",
"compilerOptions": {},
"exclude": [
"node_modules/**",
],
"include": [
"app/**/*.ts",
"app/lib/*.ts"
]
}
原因
最后学习之后发现
- ora和chalk这两个包,均只提供了ESM的包,没有commonjs的引入方式;
- import 是typescript给我们的使用方式,实际上Node配置的tsconfig.json 实际还是打包成commonjs
- 而且node 并不好使用ESM
解决方案
- 降低ora和chalk的版本
chalk: stackoverflow.com/questions/7…
ora: www.npmjs.com/package/ora…
扩展思考
- CommonJS 和 ESM的区别,在浏览器和Node中的区别,各自的使用场景
- 支持CommonJs 和 ESM的包入口方式分别是怎样的