Модуль машинописного текста не найден Не удается решить - PullRequest
4 голосов
/ 20 июня 2020

Я создаю приложение response + typescript, в котором я создал модуль с интерфейсами, которые используются во всех классах моего проекта. Моя IDE отлично справляется с этими интерфейсами, но webpack всегда отправляет следующую ошибку. Я пробовал разные вещи, но не могу получить его до go.

Любая помощь будет принята с благодарностью

ERROR in ./assets/src/Pages/Login.tsx Module not found: Error: Can't resolve 'seeyouftp' in 'var/www/app/assets/src/Pages'
 @ ./assets/src/Pages/Login.tsx 43:18-38
 @ ./assets/src/Config/App.tsx
 @ ./assets/entries/bundle.js

Мой файл определения здесь

|— definitions
     |— types.d.ts
|— entries
|— fonts
|— less
|— src

Выдержка из моего файла определения

declare module 'seeyouftp' {
  interface User {
    admin: boolean;
    roles: string[];
    username: string;
  }

  enum AuthStates {
    success = 'success',
    error = 'error'
  }

tsconfig.json

{
  "compilerOptions": {
    "allowJs": true,
    "allowUnreachableCode": false,
    "baseUrl": "./assets",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "jsx": "react",
    "lib": [
      "dom",
      "es2019",
      "esnext"
    ],
    "module": "commonjs",
    "moduleResolution": "node",
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "outDir": "./dist/",
    "resolveJsonModule": true,
    "skipDefaultLibCheck": true,
    "sourceMap": true,
    "strictPropertyInitialization": false,
    "strictNullChecks": true,
    "target": "es5",
    "typeRoots": [
      "./assets/definitions/types.d.ts",
      "./node_modules/@types"
    ],
    "types": [
      "node"
    ]
  },
  "include": [
    "./assets/src/**/*",
    "./assets/definitions/**/*"
  ],
  "exclude": [
    "node_modules"
  ]
}

Я импортирую созданные интерфейсы следующим образом:

import { Item, PlayableMedia } from 'seeyouftp';

Ответы [ 4 ]

1 голос
/ 22 июня 2020

Попробуйте экспортировать объявления и посмотрите, имеет ли это значение:

declare module 'seeyouftp' {
export  interface User {
    admin: boolean;
    roles: string[];
    username: string;
  }

export  enum AuthStates {
    success = 'success',
    error = 'error'
  }
0 голосов
/ 30 июня 2020

Сообщение об ошибке действительно вводило в заблуждение и выглядело как ошибка машинописного текста. Похоже, что enums не может быть экспортирован напрямую, кажется необходимым использовать const, чтобы иметь возможность экспортировать их правильно.

Итак, я изменил свое объявление enum следующим образом

declare module 'seeyouftp' {

  // exporting a const instead of 
  export const enum AuthStates {
    success = 'success',
    error = 'error'
  }
}

Теперь все работает, но это сообщение об ошибке очень, очень плохое и требует много времени

0 голосов
/ 27 июня 2020

Поскольку это проблема с веб-пакетом, вам необходимо обновить конфигурацию веб-пакета. Необходимо указать Webpack, где найти модуль seeyouftp:

// webpack.config.js
const path = require('path');

module.exports = {
  //...
  resolve: {
    // Add an alias
    alias: {
      'seeyouftp': path.resolve(__dirname, 'definitions/types.d.ts')
    }
  }
};

Для пути к файлу types.d.ts Я предполагал, что ваша конфигурация веб-пакета находится рядом с папкой definitions.

Здесь - соответствующая документация по веб-пакету.

0 голосов
/ 22 июня 2020

Вам нужно создать seeyouftp (я предполагаю, что seeyouftp - это ваше js имя модуля) в папке /definitions и иметь types.d.ts внутри /definitions/seeyouftp как структуру ниже

|— definitions
 |—seeyouftp
  |— index.d.ts
|— entries
|— fonts
|— less
|— src

И обновите свой tsconfig

"typeRoots": [
  "./assets/definitions",
  "./node_modules/@types"
],
...