Подтвердить что ты не робот

Как использовать пути в tsconfig.json?

Я читал о path-mapping в tsconfig.json и я хотел использовать его, чтобы избежать использования следующих уродливых путей:

enter image description here

Организация проекта немного странна, потому что у нас есть монорепозиторий, содержащий проекты и библиотеки. Проекты группируются компанией и браузером/сервером/универсальным.

enter image description here

Как настроить пути в tsconfig.json а не:

import { Something } from "../../../../../lib/src/[browser/server/universal]/...";

Я могу использовать:

import { Something } from "lib/src/[browser/server/universal]/...";

Будет ли что-то еще необходимо в конфигурации webpack? или достаточно tsconfig.json?

4b9b3361

Ответ 1

Это можно настроить в вашем файле tsconfig.json, так как это функция TS.

Вы можете сделать так:

"compilerOptions": {
        "baseUrl": "src", // This must be specified if "paths" is.
         ...
        "paths": {
            "@app/*": ["app/*"],
            "@config/*": ["app/_config/*"],
            "@environment/*": ["environments/*"],
            "@shared/*": ["app/_shared/*"],
            "@helpers/*": ["helpers/*"]
        },
        ...

Имейте в виду, что путь, на который вы хотите сослаться, принимает ваш baseUrl в качестве базы маршрута, на который вы указываете, и является обязательным, как описано в документе.

Символ '@' не является обязательным.

После того, как вы настроите его таким образом, вы можете легко использовать его следующим образом:

import { Yo } from '@config/index';

единственное, что вы можете заметить, это то, что intellisense не работает в текущей последней версии, поэтому я бы посоветовал придерживаться соглашения об индексе для импорта/экспорта файлов.

https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping

ОБНОВЛЕНИЕ Проверьте этот пример, который я сделал, чтобы продемонстрировать, как отображается в одном файле:

https://github.com/ialex90/TypeScript-Node-Starter/commit/a4e8cc1f8f8d5176e0099e05b51f97b0ef4bebea

Ответ 2

Вы можете использовать комбинацию baseUrl и paths Docs.

Предполагая, что root находится в самом верхнем каталоге src (и я правильно прочитал ваше изображение), используйте

// tsconfig.json
{
  "compilerOptions": {
    ...
    "rootDir": ".",
    "paths": {
      "lib/*": [
        "src/org/global/lib/*"
      ]
    }
  }
}

Для webpack вам также может потребоваться добавить разрешение модуля. Для webpack2 это может выглядеть так:

// webpack.config.js
module.exports = {
    resolve: {
        ...
        modules: [
            ...
            './src/org/global'
        ]
    }
}

Ответ 3

Проверьте это аналогичные решения звездочкой

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

Ответ 4

Ответ Alejandros работал для меня, но поскольку я использую awesome-typescript-loader с webpack 4, мне также пришлось добавить tsconfig-paths-webpack-plugin в свой файл webpack.config, чтобы он правильно разрешал

Ответ 5

если используется typescript + webpack 2 + at-loader, есть дополнительный шаг (решение @mleko работает только частично для меня):

// tsconfig.json
{
  "compilerOptions": {
    ...
    "rootDir": ".",
    "paths": {
      "lib/*": [
        "src/org/global/lib/*"
      ]
    }
  }
}    

// webpack.config.js
const { TsConfigPathsPlugin } = require('awesome-typescript-loader');

resolve: {
    plugins: [
        new TsConfigPathsPlugin(/* { tsconfig, compiler } */)
    ]
}

Расширенное разрешение пути в typescript 2.0

Ответ 6

Если вы используете пути, вам нужно будет tsc абсолютные пути к относительным путям, чтобы он работал после компиляции машинописных текстов в простой javascript с использованием tsc.

Наиболее популярным решением для этого было tsconfig-пути до сих пор.

Я пробовал, но это не сработало для меня для моей сложной настройки. Кроме того, он разрешает пути во время выполнения, что означает накладные расходы с точки зрения размера вашего пакета и разрешения производительности.

Итак, я сам написал решение, tscpaths.

Я бы сказал, что это лучше всего, потому что он заменяет пути во время компиляции. Это означает, что нет зависимости от времени выполнения или каких-либо издержек производительности. Он довольно прост в использовании. Вам просто нужно добавить строку в свои скрипты сборки в package.json.

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

Ответ 7

/ начинается только с корня, чтобы получить относительный путь, который мы должны использовать ./ или ../

Ответ 8

Своего рода относительный путь вместо приведенного ниже кода

import { Something } from "../../../../../lib/src/[browser/server/universal]/...";

Мы можем избежать "../../../../../", это выглядит странно и не читаемым тоже.

Таким образом, в конфигурационном файле Typescript есть ответ на то же самое. Просто укажите baseUrl, config позаботится о вашем относительном пути.

Способ настройки: в файле tsconfig.json добавьте следующие свойства.

"baseUrl": "src",
    "paths": {
      "@app/*": [ "app/*" ],
      "@env/*": [ "environments/*" ]
    }

Итак, наконец, это будет выглядеть ниже

import { Something } from "@app/src/[browser/server/universal]/...";

Выглядит просто, потрясающе и более читабельно.

Ответ 9

Похоже, было обновление для React, которое не позволяет вам устанавливать "paths" в tsconfig.json в tsconfig.json случае.

Приятно React просто выводит предупреждение:

The following changes are being made to your tsconfig.json file:
  - compilerOptions.paths must not be set (aliased imports are not supported)

затем обновляет ваш tsconfig.json и удаляет весь раздел "paths" для вас. Есть способ обойти этот забег

npm run eject

Это приведет к удалению всех настроек create-react-scripts путем добавления каталогов config и scripts и файлов build/config в ваш проект. Это также дает гораздо больший контроль над тем, как все построено, названо и т.д. Путем обновления файлов {project}/config/*.

Затем обновите ваш tsconfig.json

{
    "compilerOptions": {
        "baseUrl": "./src",
        {…}
        "paths": {
            "assets/*": [ "assets/*" ],
            "styles/*": [ "styles/*" ]
        }
    },
}

Ответ 10

Это работает для меня:

 yarn add --dev tsconfig-paths

 ts-node -r tsconfig-paths/register <your-index-file>.ts

Это загружает все пути в tsconfig.json. Пример tsconfig.json:

{
    "compilerOptions": {
        {…}
        "baseUrl": "./src",
        "paths": {
            "assets/*": [ "assets/*" ],
            "styles/*": [ "styles/*" ]
        }
    },
}

Убедитесь, что у вас есть и baseUrl, и пути для этого

Ответ 11

Если я не ошибаюсь, ./ означает начать с текущего каталога файла, а / означает начать с корня. Таким образом, вы можете заменить все ../ в начале на /