IntelliSense与tsc编译正常但跨文件夹出现MODULE_NOT_FOUND错误
解决模块找不到(MODULE_NOT_FOUND)问题
问题根源
你直接导入了config的源码目录(../../config/src),编译后的JS文件会保留这个相对路径,但运行时Node会去寻找该路径下的JS文件,而非config/dist里的编译产物,同时相对路径在编译后的目录结构下也会失效。
解决方案
1. 为每个子项目配置package.json
在config文件夹下创建package.json,明确包的入口文件:
{ "name": "@local/config", "main": "./dist/src/index.js", "types": "./dist/src/index.d.ts", "private": true }
同样在js_query文件夹下创建package.json(规范项目结构):
{ "name": "@local/js_query", "private": true }
2. 配置TypeScript路径映射
修改js_query/tsconfig.json,添加路径映射让TS正确识别本地包:
{ "compilerOptions": { "baseUrl": ".", "paths": { "@local/config": ["../config/src"] }, "moduleResolution": "node", // 保留原有其他配置 } }
3. 关联本地包(npm link)
- 进入
config目录,执行:npm link - 进入
js_query目录,执行:npm link @local/config
这会让Node在运行时把@local/config指向本地config包的编译产物。
4. 修改导入语句
把js_query/src/index.ts里的导入改成包名形式:
import Database from 'better-sqlite3'; import { config, loadConfig } from '@local/config'; loadConfig('./config/root.json'); // 注意:此路径是相对于你执行node命令的目录,若运行编译后的文件可能需要调整为绝对路径或正确相对路径 console.log(config);
5. 按顺序编译项目
先编译config,再编译js_query,确保依赖的编译产物存在:
cd config && tsc cd ../js_query && tsc
也可以在根目录的package.json里添加脚本简化操作:
{ "scripts": { "build:config": "cd config && tsc", "build:js_query": "cd js_query && tsc", "build": "npm run build:config && npm run build:js_query" } }
额外注意
运行编译后的文件时,比如执行node js_query/dist/src/index.js,loadConfig('./config/root.json')的路径是相对于当前终端的工作目录,若找不到root.json,可以改成绝对路径,或者调整为相对于编译后JS文件的路径:
import { join } from 'path'; loadConfig(join(__dirname, '../../../config/root.json'));
内容的提问来源于stack exchange,提问作者Matthew Swaringen
相关产品推荐
相关产品推荐

