由于法律障碍,我们将node_modules放在另一个文件夹中(我们称之为“外部”),因此来自TS docs的后续句子不适用:“任何封闭文件夹的node_modules / @类型中的包被视为可见;具体而言,这意味着包装在./node_modules/@types/,../node_modules/@types/,../../node_modules/@types/,等等“。
我相信是这样,因为我的文件夹位于./external/node_modules而不是./node_modules。
这可以以某种方式工作吗?我也尝试过这种方式:
"compilerOptions": {
"module": "amd",
"target": "es5",
"sourceMap": true,
"removeComments": true,
"allowJs": false,
"pretty": true,
"experimentalDecorators": true,
"typeRoots": ["./external/node_modules/@types"]
}
文件夹结构:
- external
-- node_modules
--- @types
- tsconfig.json
现在当我尝试导入角度时,我收到“无法找到模块角度”错误消息。
答案 0 :(得分:1)
听起来编译器实际上找不到该模块
编译器正在为它寻找模块和定义文件,因此仅指定typeRoots
是不够的,您可能还需要在compiler options中设置baseUrl
:
用于解析非相对模块名称的基目录
正如Module Resolution baseUrl section中所写:
使用baseUrl是使用AMD模块的应用程序中的常见做法 在运行时将模块“部署”到单个文件夹的加载器。 这些模块的源可以存在于不同的目录中,但是 构建脚本将把它们放在一起。
设置baseUrl通知编译器在哪里可以找到模块。所有模块 具有非相对名称的导入被假定为相对于 的baseUrl。
我从来没有参加过你的场景,所以这更像是猜测...... 但是看一下有关模块解析的文档中描述的步骤:
非相对导入将首先遵循Node.js解析逻辑 查找文件,然后查找适用的文件夹。所以进口{b 源文件/src/moduleA.ts中的“moduleB”将导致 以下查找:
- /root/src/node_modules/moduleB.ts
- /root/src/node_modules/moduleB.tsx
- /root/src/node_modules/moduleB.d.ts
- /root/src/node_modules/moduleB/package.json(如果它指定了“typings”属性)
- /root/src/node_modules/moduleB/index.ts
- /root/src/node_modules/moduleB/index.tsx
/root/src/node_modules/moduleB/index.d.ts
/root/node_modules/moduleB.ts
- /root/node_modules/moduleB.tsx
- /root/node_modules/moduleB.d.ts
- /root/node_modules/moduleB/package.json(如果它指定了“typings”属性)
- /root/node_modules/moduleB/index.ts
- /root/node_modules/moduleB/index.tsx
/root/node_modules/moduleB/index.d.ts
/node_modules/moduleB.ts
- /node_modules/moduleB.tsx
- /node_modules/moduleB.d.ts
- /node_modules/moduleB/package.json(如果它指定了“typings”属性)
- /node_modules/moduleB/index.ts
- /node_modules/moduleB/index.tsx
- /node_modules/moduleB/index.d.ts
醇>
它似乎不应该在./external/...