我正在尝试使用非相对导入来导入模块,但是它不起作用:
tsconfig.json
{
"compilerOptions": {
"target": "es5",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"suppressImplicitAnyIndexErrors": true,
"rootDir": ".",
"outDir": "build/js",
"baseUrl": "."
// "paths": {
// "@build/*": ["./build/*"]
// }
},
"exclude": ["node_modules", "build-releases", "addons"]
}
代码:
// const addon = require('../../../build/addon.node');
const addon = require('build/addon.node');
const debug = true;
export { addon, debug };
注释的代码有效,但未注释的要求无效。
此错误输出:
App threw an error during load
Error: Cannot find module 'build/addon.node'
Require stack:
- /Users/name/Desktop/workspace/proj/build/js/vapp/globals.js
目录结构:
tree build/
build/
├── addon.node
└── js
└── vapp
├── client.js
├── client.js.map
├── globals.js
├── globals.js.map
├── index.js
├── index.js.map
├── utils.js
└── utils.js.map
(内部版本为CWD)
相对导入是以/、./或../.
开头的任何其他导入均被视为非相对导入。
设置baseUrl通知编译器在哪里可以找到模块。假定所有具有非相对名称的模块导入都相对于baseUrl。
问题:这是因为TypeScript不负责使用require
进行模块解析吗?就像是节点相关的东西还是TypeScript的东西?
我尝试运行tsc --traceResolution
,但未发现有关尝试导入addon.node
的要求的信息。这让我意识到:TypeJS可能不负责模块解析,NodeJS负责。看起来您可以轻松地更改NodeJS的baseURL目录,并且如果我想使用不同的别名路径进行转译,则必须使用Webpack之类的东西。