有个 ts 项目编译时报错:
Module not found: Error: Can't resolve 'xlsx' in 'd:crxcrx-bussrc'
项目环境:
- webpack v4.x
- ts-loader v5.x
- xlsx v0.15.4
分析
从报错字面理解,像是 xlsx 这个第三方 package 在查找时,从 src 目录找不到。可这个包应该从 node_modules 里找才对。
调试
在 npm 的 scripts 里 webpack 命令后添加参数:
webpack --display-error-details
观察更细节的错误显示。
发现端倪:
从更丰富的报错信息中可以看到,查找模块的过程在 node_modules/xlsx 里遍历各种扩展名,以试图寻找 xlsx ,但都未找到。
下手:
于是我打开 node_modules/xlsx,发现其 package.json 中的 main 属性值为 ./xlsx,并未带扩展名,而目录里提供的 xlsx.js ,扩展名为 js。
解药:
我检查 webpack.conf.js 配置,追加了扩展名 .js
resolve: {
extensions: ['.ts', '.js', '.d.ts'],
},
至此,问题解决。