问题
当我们使用最新的仅 esm 包移动代码时,我的 Visual Studio 代码调试器就停止工作。在我们对 .swcrc 和 typescript 配置进行更改后,调试器会抛出错误 无法获取 node_modules 路径
设置
我的调试器设置(launch.json 的一部分)如下
{
"name": "run api tests",
"request": "launch",
"type": "node",
"skipFiles": ["<node_internals>/"],
"program": "${workspaceFolder}/apps/api/node_modules/jest/bin/jest.js",
"envFile": "${workspaceFolder}/apps/api/.env.test",
"args": ["--config", "./apps/api/jest-api.config.mjs"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
jest-api.config.mjs
中的设置应该是无关紧要的,因为它只从我们的node_modules运行jest。
.swcrc
{
"$schema": "https://json.schemastore.org/swcrc",
"module": {
"type": "commonjs"
},
"jsc": {
"parser": {
"syntax": "typescript",
"dynamicImport": true,
"tsx": false,
"decorators": false
},
"experimental": {
"plugins": [["swc_mut_cjs_exports", {}]]
},
"transform": { "legacyDecorator": true, "decoratorMetadata": false, "useDefineForClassFields": false },
"target": "es2020",
"externalHelpers": true,
"baseUrl": "."
},
"sourceMaps": true
}
tsconfig.json
{
"$schema": "https://json.schemastore.org/tsconfig",
"compileOnSave": true,
"compilerOptions": {
"rootDir": "./src",
"outDir": "dist",
"module": "commonjs",
"target": "ES2020",
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"sourceMap": true,
"allowJs": true,
"resolveJsonModule": true,
"removeComments": true,
"alwaysStrict": true,
"strictNullChecks": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"lib": ["es2020"],
"skipLibCheck": true,
"declaration": true,
"declarationMap": true,
"importsNotUsedAsValues": "error",
"ignoreDeprecations": "5.0",
"importHelpers": true,
"isolatedModules": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "storage", "package.json", "test_assets"],
"files": ["src/types.ts"],
"ts-node": {
"files": true
}
}
错误信息
● Test suite failed to run
failed to get the node_modules path
at Compiler.transformSync (../../node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@swc/core/index.js:244:29)
at transformSync (../../node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@swc/core/index.js:351:21)
at Object.process (../../node_modules/.pnpm/@[email protected]_@[email protected]_@[email protected]_/node_modules/@swc/jest/index.js:73:45)
at ScriptTransformer.transformSource (../../node_modules/.pnpm/@[email protected]/node_modules/@jest/transform/build/ScriptTransformer.js:545:31)
at ScriptTransformer._transformAndBuildScript (../../node_modules/.pnpm/@[email protected]/node_modules/@jest/transform/build/ScriptTransformer.js:674:40)
at ScriptTransformer.transform (../../node_modules/.pnpm/@[email protected]/node_modules/@jest/transform/build/ScriptTransformer.js:726:19)`
辅助信息
我们使用 pnpm 来管理同一文件夹中的多个存储库。这在迁移之前也有效。难道现在我必须指定在哪里找到正确的node_modules?!我给出了 jest 二进制文件的正确路径,因此它应该可以工作。
对我来说安装
@swc/plugin-transform-imports
解决了问题:
npm i @swc/plugin-transform-imports