Встроенная библиотека не может быть импортирована в другой проект - PullRequest
0 голосов
/ 20 января 2020

Мне нужно собрать библиотеку, которая является оболочкой для soap API. Структура библиотеки следующая:

|-node_modules
|
|-src
|  |-soapWrapperLibrary.ts
|  |-soapLibraryClient.ts
|
|-types
|  |-soapResponseType.d.ts

library использует client, который возвращает определенный объект soapResponseType, который я определил.

Эта библиотека будет быть использованы в другом проекте стажера. Ничего не нужно толкать к npm или подобным. Я пытался скомпилировать его с tsc, но результат компиляции проигнорировал определенный мной тип (soapResponseType.d.ts). Это приводит к ошибке при импорте моей библиотеки, потому что файл определения не может быть найден.

Я пробовал несколько подходов, которые относятся к скомпилированным типам с typeRoots, без результата.

Я ожидаю от tsc, что все мои файлы скомпилированы как один пакет или что-то, что может быть импортировано как единое целое, с типами и классами в нем.

Со следующими параметрами, единственное, что я получаю это следующая структура без следа soapResponseType.d.ts:

|-dist
|  |-lib
|  |  |-soapWrapperLibrary.js
|  |  |-soapWrapperLibrary.js.map
|  |  |soapLibraryClient.js
|  |  |soapLibraryClient.js.map
|  |-types
|  |  |-soapWrapperLibrary.d.ts
|  |  |soapLibraryClient.d.ts

Команда tsc --listFiles показывает три файла, которые я создал: два .ts файла и один .d.ts

Репо для репродукции https://github.com/TheoSl93/buildLibraryTest

Это мои tsconfig.json и package.json:

tsconfig

{
  "compilerOptions": {
    "target": "es5",
    "module":"es2015",
    "strict": true,
    "declaration": true,
    "outDir": "dist/lib",
    "declarationDir": "dist/types",
    "jsx": "preserve",
    "importHelpers": true,
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "removeComments": true,
    "sourceMap": true,
    "baseUrl": ".",
    "paths": {
      "@/*": [
        "./types"
      ]
    },
    "lib": ["es2015", "es2016", "es2017", "dom"],
    "emitDecoratorMetadata": true,
    "typeRoots": [
      "node_modules/@types",
      "types/*"
    ]
  },
  "typedocOptions": {
    "mode": "modules",
    "out": "docs",
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "test/**/*.ts",
    "test/**/*.tsx"
  ],
  "exclude": [
    "node_modules",
    "test"
  ],
}


пакет

  "name": "soap-library",
  "version": "0.0.1",
  "description": "reproduce for stackoverflow",
  "main": "dist/lib/soapLibraryClient.js",
  "repository": "https://github.com/TheoSl93/buildLibraryTest.git",
  "author": "Theo Sloot",
  "license": "MIT",
  "scripts": {
    "prebuild": "rm -rf dist",
    "build": "tsc --module commonjs"
  },
  "sideEffects": false,

На данный момент:

  • Есть ли способ включить собственные определения в скомпилированные с использованием только tsc?
  • Это действительно необходимо? Может ли эта библиотека импортироваться с использованием только файлов .ts вместо скомпилированных файлов .js?

1 Ответ

0 голосов
/ 21 января 2020

Чтобы заставить машинопись использовать ваш файл определения типа (soapResponseType.d.ts), вам нужно определить soapResponseType.d.ts как soapResponseType.ts в вашей папке типов, и она сгенерирует soapResponseType.d.ts с точным содержанием soapResponseType.ts, так как оба являются .ts файлами и не требуют транспиляции. Кроме того, вам следует рассмотреть возможность перемещения вашей папки types в папку src, поскольку ваш tsconfig настроен на компиляцию только папки src.

...