538*_*MEO 10 javascript symlink node.js typescript monorepo
这似乎是一个愚蠢的问题,但我很难找到答案。
\n这是我的文件夹结构:
\nmyProject/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 module1/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 config.ts\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 init.ts #symlink\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 module2/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 config.ts\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 init.ts #symlink\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 symlinks/\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 init.ts # the real not duplicated file\nRun Code Online (Sandbox Code Playgroud)\n文件init.js导入本地文件,如下所示:
import config from \'./config\'\n\n// ...\nRun Code Online (Sandbox Code Playgroud)\n问题是打字稿抛出Cannot find module \'./config\' or its corresponding type declarations
我尝试使用打字稿选项preserveSymlinks但它没有解决我的问题
我知道实现我的目标的其他方法,但对于一个文件来说它太过分了,而且它不能解决相对路径上的中继问题(比如创建一个 npm 模块,创建一个函数并传递相对文件内容作为参数,甚至在运行时生成文件...)
\n=> 我正在monorepo中使用typescript。
\n可以这样使用符号链接吗?如果没有,还有其他(简单的)替代方案吗?
\n编辑:我已经制作了这个示例仓库,您可以使用它作为实验的基础
\nJul*_*ipe -1
默认情况下,TypeScript 根据文件的物理路径解析模块,而不是遵循任何符号链接后解析的路径。因此,在您的情况下,当您尝试config从导入时,TypeScript 会在物理路径或./config处查找文件,但它实际上位于。myProject/module1/config.tsmyProject/module2/config.tsmyProject/symlinks/config.ts
您可以通过在 tsconfig.json 文件中设置resolveSymlinks选项来告诉 TypeScript 根据解析的路径解析模块:true
{
"compilerOptions": {
// ...
"resolveSymlinks": true
},
// ...
}
Run Code Online (Sandbox Code Playgroud)
这将导致 TypeScript 在解析模块时遵循符号链接,因此它应该能够找到您的config文件。请注意,如果您使用 Webpack 等可能会更改解析路径的工具,则可能还需要设置preserveSymlinks为。true
另一种选择是在 tsconfig.json 文件中使用模块别名将./config路径映射到正确的位置。例如:
{
"compilerOptions": {
// ...
"baseUrl": ".",
"paths": {
"*": ["*", "symlinks/*"]
}
},
// ...
}
Run Code Online (Sandbox Code Playgroud)
这将告诉 TypeScript 在目录及其原始位置中查找所有模块symlinks。config然后,您可以像这样导入:
import config from 'module1/config';
Run Code Online (Sandbox Code Playgroud)
无论 init.ts 是符号链接还是常规文件,这都应该有效。
| 归档时间: |
|
| 查看次数: |
1332 次 |
| 最近记录: |