gpt4 book ai didi

typescript - SystemJS 和 ES 模块导入的相对路径

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:42 26 4
gpt4 key购买 nike

我在使用 SystemJS 和 ES 导入语法时遇到导入 Angular2 组件的问题。

项目结构:

ROOT
|_src
|_client
|_app
|_frameworks
|_il8n
|_analytics
|_main
|_components
|_pages
|_utility

假设我有一个文件:ROOT/src/client/app/frameworks/il8n/language-service.ts 和另一个文件:ROOT/src/client/app/main/pages/login/login.ts。在 login.ts 中,我想导入 language.ts,所以一种方法是这样的:

//登录.ts
从 '../../../../frameworks/il8n/language-service' 导入 { LanguageService };

另一种使用桶的方法是这样的:

//登录.ts
从 '../../../../frameworks/index' 导入 { LanguageService };

frameworks/index.ts 正在执行 export * from './il8n/language-service';

我不想在每次需要导入某些东西时都执行 ../../../ 等操作;如果我可以import { LanguageService } from 'frameworks';

就好了

到目前为止,我已经能够使用 SystemJS 的 "map" option 让我的构建过程正常工作像这样:

map: {
frameworks: 'src/client/app/frameworks/index',
components: 'src/client/app/main/components/index',
pages: 'src/client/app/main/pages/index'
}

但是,每当我执行以下操作时,我的 IDE 就会报错(所有 IntelliSense 功能都完全损坏):

`import { LanguageService } from 'frameworks';`

这是我的 tsconfig.json 文件:

{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": false,
"removeComments": true,
"noLib": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true,
"pretty": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitUseStrict": false,
"noFallthroughCasesInSwitch": true,
"baseUrl": "./src",
"paths": {
"frameworks": ["client/app/frameworks"],
"components": ["client/app/main/components"],
"pages": ["client/app/main/pages"],
"utility": ["client/app/main/utility"]
}
},
"compileOnSave": false
}

有没有办法同时满足我的 IDE 和 SystemJS 构建配置,以便我可以进行“简单”导入?

最佳答案

所以,这个问题是基于 Angular2 种子(高级) repo 发现 here .我发布了一个issue还有(在那里你可以看到确切的修复)。长话短说:

您需要 TypeScript 2.0 才能使用 tsconfig 文件中的 pathsbaseUrl 选项。然后在您的 SystemJS 配置文件中,您需要向 pathspackages 选项添加一些配置,如下所示:

packages: {
...
frameworks: { defaultExtension: js, main: index.js }
...
},
paths: {
...
frameworks: 'relative/path/to/frameworks/folder'
...
}

index.ts 是您的 frameworks 文件夹中的一个文件,它导出该目录中的模块。例如,如果您在 frameworks 目录中的某处有一个 language.component.ts 文件,在 frameworks/index.ts 文件中,您将执行以下操作:

从“path/to/language.component”导出 *;

这允许您在项目中执行 import {LanguageComponent} from 'frameworks';(只要您在 frameworks 目录之外)。

希望这对您有所帮助!

关于typescript - SystemJS 和 ES 模块导入的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38618257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com