Импорт Typescript возвращает «Не удается найти модуль» - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь импортировать модуль как 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'
}

" . 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 ]

1 голос
/ 16 апреля 2020

"paths" должен находиться в разделе "compilerOptions", а не в root из tsconfig.json

Подробнее о отображении пути здесь

Обзор tsconfig.json здесь

0 голосов
/ 16 апреля 2020

Обратите внимание, что импорт будет казаться нормальным во время разработки, если импортировать момент таким образом, но вы можете получить ошибку AOT при выполнении компиляции prod, что-то вроде «не может использовать ссылку» или что-то подобное. Чтобы не вдаваться в подробности, это относится (как я понимаю) к некоторым модулям Common JS. Момент очень популярен, так что, кажется, он появляется совсем немного.

Чтобы обойти этот момент (который я пробежал пару недель за go), установите для «moment» значение const:

import * as moment from 'moment':

(later where you declare consts)

const _moment = moment;

И тогда вы используете _moment в своем коде.

0 голосов
/ 16 апреля 2020

У меня была похожая проблема с моментом, который я импортировал, как показано ниже, и он работает.

import * as moment from 'moment';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...