有個 ts 項目編譯時報錯:
Module not found: Error: Can't resolve 'xlsx' in 'd:\crx\crx-bus\src'
項目環境:
- 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'],
},
至此,問題解決。