打字稿导入返回“找不到模块”

时间:2020-04-16 12:25:33

标签: javascript node.js typescript import

我正在尝试将模块导入为import Something from "@module",但是它返回

找不到模块'@config'

“ @ module”是“ ./src/utils/module”的别名

“ app.ts”

import 'module-alias/register';

import Something from '@module';

“ / utils / module.ts”

export enum Something {
    CONSTANT = 'constant'
}

“ package.json”

{
  "name": "crawler",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "dev": "nodemon ./src/app.ts",
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@types/node": "^13.11.1",
    "nodemon": "^2.0.3",
    "ts-node": "^8.8.2",
    "typescript": "^3.8.3"
  },
  "dependencies": {
    "module-alias": "^2.2.2"
  },
  "_moduleAliases": {
    "@module": "./src/utils/module"
  }
}

“ tsconfig.json”

{
  "compilerOptions": {
    "baseUrl": ".",
    "module": "commonjs",
    "esModuleInterop": true,
    "target": "es6",
    "lib": [
      "es6"
    ],
    "outDir": "dist",
    "noEmitOnError": true,
    "sourceMap": true
  },
  "include": [
    "src/**/*.ts"
  ],
  "paths": {
    "@module": [
      "./src/utils/module"
    ]
  },
  "exclude": [
    "node_modules"
  ]
}

为什么import "@module"const Something = require('@module')正常工作,而import Something from "@module"返回找不到模块错误?

这是项目结构:

- crawler
|-- src
    -- app.ts
    |-- utils
        -- module.ts

3 个答案:

答案 0 :(得分:1)

"paths"应该在"compilerOptions"部分,而不是tsconfig.json的根目录

有关路径映射here的更多信息

tsconfig.json here

的概述

答案 1 :(得分:0)

我在导入“矩”时遇到了类似的问题,如下所示,它确实起作用。

import * as moment from 'moment';

答案 2 :(得分:0)

请注意,以这种方式导入时在进行开发时,导入看起来会很好,但是在进行prod编译时可能会出现AOT错误,例如“不能使用引用”之类。为了不做过多阐述,这与某些CommonJS模块有关(据我所知)。片刻非常受欢迎,因此似乎出现了很多。

要解决这个问题(我在几周前就遇到了),请将“ moment”设置为const:

import * as moment from 'moment':

(later where you declare consts)

const _moment = moment;

然后在代码中使用_moment。