简体   繁体   English

无法解析另一个文件中的 Typescript 模块

[英]Can't resolve Typescript module in another file

I'm migrating my react app to typescript. It works fine now, But after adding typescript compiler and renaming files to.ts and.tsx, its throwing module not found.我正在将我的 React 应用程序迁移到 typescript。它现在工作正常,但是在添加 typescript 编译器并将文件重命名为 .ts 和 .tsx 之后,找不到它的投掷模块。 Any lead will be helpful.任何线索都会有所帮助。 I have got the following dir structure.我有以下目录结构。

| src
  | select.tsx
  | index.ts
  | WindowedSelect.tsx
  | MenuList.tsx
| demo
  | index.tsx
| webpack.config.demo.js
| webpack.config.js
| tsconfig.json
| package.json

I run demo/index ( webpack.config.demo ) for npm start command and src/index.tsx (webpack.config) for npm run build .我为npm start命令运行 demo/index ( webpack.config.demo ),为npm run build命令运行 src/index.tsx (webpack.config)。 But getting Moddule Not found error in both.但是在两者中都找不到 Moddule Not found 错误。

Error (npm start):错误(npm 启动):

ERROR in ./demo/index.tsx
Module not found: Error: Can't resolve '../src/WindowedSelect'

Error (npm run build):错误(npm 运行构建):

ERROR in ./src/index.ts
Module not found: Error: Can't resolve './MenuList'

ERROR in ./src/index.ts
Module not found: Error: Can't resolve './WindowedSelect'

The IntelliSense works fine and navigates to corresponding files on click. IntelliSense 工作正常并在单击时导航到相应的文件。 I don't understand what is the issue here.我不明白这里的问题是什么。

PS: apart from the module not found error, there are also several type errors as this is a js project. PS:除了module not found错误,还有几个类型错误,因为这是一个js项目。 The plan is to gradually migrate to typescript. So how to set the default severity to "warn" for type errors?计划是逐步迁移到typescript。那么如何设置类型错误的默认严重性为“警告”呢?

webpack.config.js webpack.config.js

const path = require('path');

module.exports = {
  entry: './src/index.ts',
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist'),
    libraryTarget: 'commonjs2',
  },
  module: {
    rules: [
      {
        test: /\.(ts|tsx)$/,
        exclude: /node_modules/,
        use: {
          loader: "ts-loader"
        }
      }
    ]
  },
  externals: {
    react: 'commonjs react',
    'react-dom': 'commonjs react-dom'
  },
};

Edit: tsconfig.json编辑:tsconfig.json

{
  "compilerOptions": {
    /* Visit https://aka.ms/tsconfig.json to read more about this file */

    /* Basic Options */
    // "incremental": true,                   /* Enable incremental compilation */
    "target": "es5",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
    "lib": [                                  /* Specify library files to be included in the compilation. */
      "DOM",
      "DOM.Iterable",
      "ESNext"
    ],
    "allowJs": true,                          /* Allow javascript files to be compiled. */
    // "checkJs": true,                       /* Report errors in .js files. */
    "jsx": "react",                           /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
    // "outFile": "./",                       /* Concatenate and emit output to single file. */
    // "outDir": "./",                        /* Redirect output structure to the directory. */
    // "rootDir": "./",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
    // "composite": true,                     /* Enable project compilation */
    // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */
    // "removeComments": true,                /* Do not emit comments to output. */
    // "noEmit": true,                        /* Do not emit outputs. */
    // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */
    // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
    "isolatedModules": true,                  /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */

    /* Strict Type-Checking Options */
    "strict": false,                           /* Enable all strict type-checking options. */
    "noImplicitAny": false,                 /* Raise error on expressions and declarations with an implied 'any' type. */
    "strictNullChecks": false,              /* Enable strict null checks. */
    "strictFunctionTypes": false,           /* Enable strict checking of function types. */
    "strictBindCallApply": false,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
    "strictPropertyInitialization": false,  /* Enable strict checking of property initialization in classes. */
    "noImplicitThis": false,                /* Raise error on 'this' expressions with an implied 'any' type. */
    "alwaysStrict": false,                  /* Parse in strict mode and emit "use strict" for each source file. */

    /* Additional Checks */
    // "noUnusedLocals": true,                /* Report errors on unused locals. */
    // "noUnusedParameters": true,            /* Report errors on unused parameters. */
    // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */
    // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */

    /* Module Resolution Options */
    // "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
    // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
    // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
    // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
    // "typeRoots": [],                       /* List of folders to include type definitions from. */
    // "types": [],                           /* Type declaration files to be included in compilation. */
    // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
    "esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */
    // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */

    /* Source Map Options */
    // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */
    // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */
    // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */
    // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */

    /* Experimental Options */
    // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
    // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */

    /* Advanced Options */
    "skipLibCheck": true,                     /* Skip type checking of declaration files. */
    "forceConsistentCasingInFileNames": true  /* Disallow inconsistently-cased references to the same file. */
  }
}

It sounds like the issue is likely from missing to point out the resolve extensions in webpack.config .听起来这个问题很可能是因为缺少指出webpack.config中的解析扩展。 Try to add more that property:尝试添加更多该属性:

resolve: {
  extensions: ['.ts', '.tsx', '.js', '.jsx'],    
},

This is what worked for me after a few hours searching:经过几个小时的搜索,这对我有用:

npm install --save-dev typescript @types/node @types/react @types/react-dom @types/jest --force

Then I created a tsconfig.json file and pasted the following code:然后我创建了一个tsconfig.json文件并粘贴了以下代码:

{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx"
  },
  "include": ["src"]
}

Finally, I restarted the app.最后,我重新启动了应用程序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM