我有一个用Typescript编写的Node.js项目,期望作为CLI运行,但在使用绝对路径(相对路径可以正常工作)导入位于“node_modules”目录之外的模块时遇到了问题。值得一提的是,我正在使用 oclif框架构建我的CLI。
我的项目组织如下:
当我尝试使用ts-node执行我的应用程序时,我得到了以下结果:
我的项目组织如下:
cli
|--node_modules
|--src
|--my-module.ts
|--subdir
|--index.ts
在 my-module.ts
中,我有:
export class MyClass {
myClassFcn(s: string) {
return 'result'
}
}
index.ts
脚本包含如下内容:
import {MyClass} = require('my-module')
当我尝试使用ts-node执行我的应用程序时,我得到了以下结果:
(node:10423) [MODULE_NOT_FOUND] Error Plugin: cli: Cannot find module 'my-module'
module: @oclif/config@1.6.17
task: toCached
plugin: cli
root: /home/eschmidt/Workspace/cli
Error Plugin: cli: Cannot find module 'my-module'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:571:15)
at Function.Module._load (internal/modules/cjs/loader.js:497:25)
at Module.require (internal/modules/cjs/loader.js:626:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/home/eschmidt/Workspace/cli/src/commands/create/index.ts:5:1)
at Module._compile (internal/modules/cjs/loader.js:678:30)
at Module.m._compile (/home/eschmidt/Workspace/cli/node_modules/ts-node/src/index.ts:403:23)
at Module._extensions..js (internal/modules/cjs/loader.js:689:10)
at Object.require.extensions.(anonymous function) [as .ts] (/home/eschmidt/Workspace/cli/node_modules/ts-node/src/index.ts:406:12)
at Module.load (internal/modules/cjs/loader.js:589:32)
module: @oclif/config@1.6.17
task: toCached
plugin: my-plugin
root: /home/eschmidt/Workspace/cli
我不能理解的是,当我运行tsc --traceResolution
时,模块被正确地解析:
======== Module name 'my-module' was successfully resolved to '/home/eschmidt/Workspace/cli/src/my-module.ts'. ========
我的 tsconfig.json
文件包含:
{
"compilerOptions": {
"declaration": true,
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"importHelpers": true,
"module": "commonjs",
"sourceMap": true,
"outDir": "./lib",
"pretty": true,
"rootDirs": [
"./src/"
],
"strict": true,
"target": "es2017",
"baseUrl": "src"
},
"include": [
"./src/**/*"
]
}
如果有人能够解决这个问题,或者至少建议在哪里寻求进一步帮助,我将非常感激。如果需要更多细节,请告诉我。
提前致谢!
subdir
目录中运行ts-node
,并且从你的根项目目录中运行tsc
?使用'../my-module'
导入是否管用? - Kewin Doussets-node
是在oclif
框架中注册的,并且在我运行/bin
目录下的sh脚本且lib
目录中没有任何编译后的JS文件时会自动调用。我从项目根目录使用yarn运行tsc
。像../my-module
这样的相对路径导入可以正常工作,如预期所示。 - edu_