当前位置: 首页 > 知识库问答 >
问题:

TypeScript VSCode中的自定义模块解析

萧鸿轩
2023-03-14

我有以下项目结构:

<PROJECT_FOLDER>
├── node_modules
├── src
│   ├── components
│   │   └── MyAwesomeComponent.tsx
│   ├── views
│   │   └── MyAwesomeView
│   │       └── index.tsx
│   ├── Application.tsx
│   └── index.tsx
├── webpack.config.js
└── tsconfig.json

以及以下tsconfig.json

{
    "compilerOptions": {
        "outDir": "./dist/",
        "noImplicitAny": true,
        "moduleResolution": "classic",
        "module": "es6",
        "target": "es5",
        "jsx": "react",
        "allowJs": true,
        "sourceMap": true,
        "noImplicitReturns": true,
        "experimentalDecorators": true,

        "baseUrl": ".",
        "paths": {
            "*": [
                "src/*",
                "node_modules/*"
            ]
        },
    }
}

假设我在node_modules中安装了react(甚至安装了@types/creact)。当我尝试导入时,例如import*作为React from“React”importMyComponent from“components/MyAwesomeComponent,这两个导入都是错误的,并显示消息“Cannot find module…”等。

在编写导入字符串时,VSCode建议我使用node_modules中的模块,但不建议使用src/*的文件夹。

相对导入仍然有效,但这是地狱,你知道。

我绝对是TypeScript的新手,但我正在根据“模块解析”TypeScript文档做事,它不起作用。

非常感谢这里的任何帮助!

但我认为问题不在这里,我甚至没有运行webpack-dev-server,我相信VSCode不使用web.config。js配置项目的信息:)

以下是components/MyAwesomeComponent导入的输出:

======== Resolving module 'components/MyAwesomeComponent' from '/home/username/path/to/project/src/Application.tsx'. ========
Explicitly specified module resolution kind: 'NodeJs'.
'baseUrl' option is set to '/home/username/path/to/project/src', using this value to resolve non-relative module name 'components/MyAwesomeComponent'.
Resolving module name 'components/MyAwesomeComponent' relative to base url '/home/username/path/to/project/src' - '/home/username/path/to/project/src/components/MyAwesomeComponent'.
Loading module as file / folder, candidate module location '/home/username/path/to/project/src/components/MyAwesomeComponent', target file type 'TypeScript'.
File '/home/username/path/to/project/src/components/MyAwesomeComponent.ts' does not exist.
File '/home/username/path/to/project/src/components/MyAwesomeComponent.tsx' exist - use it as a name resolution result.
======== Module name 'components/MyAwesomeComponent' was successfully resolved to '/home/username/path/to/project/src/components/MyAwesomeComponent.tsx'. ========

VSCode 没有从我的 tsconfig.json 强制更新项目设置,即使在重新加载 TypeScript 项目之后也是如此。我刚刚重新启动它,现在一切正常!:)

谢谢大家的帮助!

共有1个答案

邢昊焜
2023-03-14

您可能需要添加此密钥:

...
"include": [
    "src/**/*"
],
...

您使用的path键主要是为了让TypeScript了解您的导入“将适用于”Webpack配置。假设您在Webpack配置中有一个别名键,如:

alias: {
  core: resolve(__dirname, '../src/services/core'),

(并且您的上下文键位于 SRC 文件夹中)。

然后您应该在tsconfig中添加一个path键,如下所示

    "paths": {
        "core/*": ["./services/core/*"],

(将您的< code>src文件夹作为< code>baseURL

我总是对打字稿使用以下配置

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es3",
        "moduleResolution": "node",
        "baseUrl": "src",
        "allowSyntheticDefaultImports": true,
        "noImplicitAny": true,
        "strict": false,
        "sourceMap": true,
        "outDir": "dist/",
        "jsx": "react",

        "allowJs": true,
        "declaration": false,
        "removeComments": true,
        "noLib": false,
        "preserveConstEnums": true,
        "suppressImplicitAnyIndexErrors": true,
        "types": [ "node" ],
        "lib": ["es6", "dom"]
    },
    "include": [
        "src/**/*"
    ]
}

如果你使用的是很棒的打字稿加载器,我还包括这个:

    "awesomeTypescriptLoaderOptions": {
        "useCache": true,
        "forceIsolatedModules": true
    }

编辑:

我认为导入错误与Webpack有关。尝试在Webpack配置中设置以下内容:

const path = require('path');
...
context: path.resolve(__dirname, './src'),
resolve: {
  modules: ['src', 'node_modules']
...
 类似资料:
  • 需要 10.2.0+ 您可以在*.vue文件中定义自定义语言块。 自定义块的内容将由在vue-loader'选项的loaders对象中指定的加载器处理,然后由组件模块require。 配置类似于[先进的Loader配置](../ configurations / advanced.md)中描述的配置,除了匹配使用标记名称而不是lang`属性。 如果找到一个自定义块的匹配加载器,它将被处理; 否则将

  • 主要内容:自定义模块编写说明文档到目前为止,读者已经掌握了导入 Python 标准库并使用其成员(主要是函数)的方法,接下来要解决的问题是,怎样自定义一个模块呢? 前面章节中讲过,Python 模块就是 Python 程序,换句话说,只要是 Python 程序,都可以作为模块导入。例如,下面定义了一个简单的模块(编写在 demo.py 文件中): 可以看到,我们在 demo.py 文件中放置了变量(name 和 add)、函数(

  • 本文向大家介绍NodeJS自定义模块写法(详解),包括了NodeJS自定义模块写法(详解)的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇NodeJS自定义模块写法(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 当我想使用一些自定义URL时,我很难理解应用于自定义模块的逻辑中的错误 所以,我在我的自定义模块“页面”中使用了像这样的钩子ModuleRoutes: 和应该工作的模块控制器: 网址已正确创建,但当我试图访问该页面的内容时,我将最终出现在404错误页面我做错了什么吗?我想我错过了一些很明显的东西,但不明白是什么... 我已经做了研究,但仍然无法找到解决问题的方法。。似乎$route['contro

  • 本文向大家介绍dedecms中自定义模型的理解?相关面试题,主要包含被问及dedecms中自定义模型的理解?时的应答技巧和注意事项,需要的朋友参考一下 在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章、图集、软件、商品、分类信息、专题。通过系统自带的模型,我们可以用来构建不同类型的站点,例如:使用图集可以做一个图片站,用软件模型构建一

  • 我在prestashop中创建了一个自定义模块,但我不知道如何处理对该模块的访问。我没有找到任何关于它的文档。我知道怎么在symfony做,但在prestashop不行。我只想让一组用户访问我的模块。有人知道怎么做吗,或者有一个文档链接来帮助我?