【发布时间】:2020-07-24 10:30:48
【问题描述】:
我已经启动了一个新的 ts 项目,文件结构如下:
/src
/dir1
/dir2
app.ts
/dir3
index.ts
我以这样的方式在index.ts 中导入模块app.ts:
import app from '../dir1/dir2/app.ts'
我想用这样的别名 @ 编写代码:
import app from '@/dir1/dir2/app.ts'
或者至少喜欢import app from 'dir1/dir2/app.ts'
阅读文章和文档我发现问题可以通过像这样添加baseUrl 到tsconfig.json 来解决:
{
"compilerOptions": {
"module": "CommonJS",
"target": "es2020",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true,
"outDir": "dist",
"esModuleInterop": true,
"baseUrl": "./src"
},
"include": [
"src/**/*"
],
}
但是,结果文件index.js 需要dir1/dir2/app,并带有一条消息:Error: Cannot find module。我可以只使用 TypeScript 设置,而不使用 Babel、Webpack 和其他大型库来处理这个问题吗?
【问题讨论】:
-
别名是不好的方法,因为当你想创建另一个包并且你想将此包添加为依赖项时,如果其他包具有相同文件结构的相同别名,它将失败。
-
好的。有没有办法避免相对进口,或任何避免手段“别名”?绝对路径好吗?
-
如果你可以使用完整的包名而不是简单的
@,例如,如果包名为@company/support-app,那么你可以将@company/support-app设置为root的别名,这样,即使如果将此包作为依赖项添加,则其路径将类似于节点样式路径。在节点中你可以使用以包名开头的绝对路径,你可以配置你的加载器来做同样的事情。 -
我完全确定我的项目永远不会成为其他人的依赖项。因此,我看到
@company/support-app有点压倒性。使用import app from 'dir1/dir2/app'是个好方法吗?避免多个../序列的另一种方法是什么? -
请注意,所有对话都只是关于项目模块,而不是来自
node_modules。
标签: javascript typescript commonjs