Как мне получить typescript + webpack + vuejs, чтобы найти пакеты в моем каталоге node_modules / old / lib /? - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь превратить старый проект машинописного текста в библиотеку для нового проекта vue.js. Более старый пакет сконфигурирован для вывода на ./lib/ с tsconfig.json, а package.json включает все варианты «это то, где находится моя библиотека», о которых я могу подумать. tsc компилирует все в lib/ в старом пакете, а npm link используется для соединения пакетов вместе.

Моя проблема в том, что независимо от того, что я пробовал, я не могу удалить сегмент lib/ из моего импорта, например import { baz } from "older/common/thing" вместо import { baz } from "older/lib/common/thing". Должен ли я просто жить с этим? Или есть что-то еще, что я должен сделать для более симпатичного импорта?

package.json (частично)

{
    "main": "./lib/index.js",
    "module": "./lib/index.js",
    "types": "./lib/index.d.ts",
}

tsconfig.json

{
  "compilerOptions": {
    "module": "es6",
    "target": "es6",
    "moduleResolution": "node",
    "noImplicitAny": true,
    "noUnusedLocals": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "allowSyntheticDefaultImports": true,
    "importHelpers": true,
    "sourceMap": true,
    "typeRoots": [
      "typings",
      "node_modules/@types"
    ],
    "outDir": "./lib",
    "declaration": true
  },
  "include": [
    "app/source/**/*",
    "test/**/*"
  ],
  "exclude": [
    "node_modules"
  ]
}

1 Ответ

0 голосов
/ 25 апреля 2019

Похоже, что почти невозможно удалить дополнительный путь /lib/ при использовании модулей es6 и системы сборки JavaScript поверх Typescript. В одном ответе StackOverflow упоминалось кое-что о том, что эта функция явно отклонена от стандарта ECMA. Вместо этого библиотеки типа lodash-es создают второй вывод, который помещает все в корневой каталог пакета, рядом с package.json и tsconfig.json. Работает для меня, так как в любом случае нам, возможно, понадобятся разные настройки сборки для библиотеки и приложения.

Я положил вторую tsconfig.json и package.json в ./lib/, и просто приказал tsc извлечь источники из ../app/source/. Новая программа будет npm link с именем пакета для библиотеки вместо приложения.

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "declaration": true,
    "sourceMap": true,
    "outDir": "./",
    "rootDir": "../app/source",
    "baseUrl": "./"
  },
  "include": [
    "../app/source/**/*"
  ],
}
...