Написание модулей NPM в Typescript
Я работаю над своим первым модулем NPM. Я кратко работал с typescript раньше, и большая проблема заключалась в том, что для многих модулей не было доступных файлов определения. Поэтому я подумал, что было бы неплохо написать мой модуль в typescript.
однако, я не могу найти никакой информации о лучшем способе сделать это. Я нашел этот вопрос "могу ли я написать пакет npm в coffeescript? " где люди предлагают только публиковать файлы javascript. Но в отличие от файлы coffeescript, файлы typescript могут быть действительно полезны, если они используются в приложении typescript.
должен ли я включать файлы Typescript при публикации модуля NPM, или я должен публиковать только файлы javascript и предоставлять сгенерированные .D. TS файлы для DefinitelyTyped?
7 ответов:
вот пример модуля узла, написанный в TypeScript:https://github.com/basarat/ts-npm-module
вот пример проекта TypeScript, который использует этот пример модуля https://github.com/basarat/ts-npm-module-consume
в основном вам нужно:
- компилировать с
commonjs
иdeclaration:true
- создать
.d.ts
fileа то
- у вас есть ide читать сгенерированный
.d.ts
.Atom-TypeScript просто обеспечивает хороший рабочий процесс вокруг этого:https://github.com/TypeStrong/atom-typescript#packagejson-support
это более поздний ответ с использованием TypeScript 1.8.10:
моя структура проекта:
| |--- src |--- test |--- dist <= My gulp file compiles and places the js, sourcemaps and .d.ts files here | |--- src | |--- test |--- typings .gitignore .npmignore gulpfile.js package.json README.md tsconfig.json tslint.json typings.json
я добавил следующее в
.npmignore
чтобы избежать включения посторонних файлов и сохранить минимум, чтобы пакет был импортирован и работал:node_modules/ *.log *.tgz src/ test/ gulpfile.js tsconfig.json tslint.json typings.json typings dist/test
мой
.gitignore
есть:typings # ignore .js.map files *.js.map *.js dist
мой
package.json
есть:"main": "dist/src/index.js", "typings": "dist/src/index.d.ts",
теперь я бегу:
npm pack
результирующий файл (при распаковке) имеет следующие структура:
| |--- dist | |--- src | | | index.js | index.js.map | index.d.ts | package.json README.md
теперь я иду в проект, где я хочу использовать это в качестве библиотеки и типа:
npm install ./project-1.0.0.tgz
он успешно установлен.
теперь я создаю файл
index.ts
в моем проекте, где я только что установил НПМimport Project = require("project");
введя
Project.
дает мне варианты Intellisense, которые были целью всего этого упражнения.надеюсь, что это поможет кому-то еще в использовании их проектов npm TypeScript в качестве внутренних библиотек в их большие проекты.
PS: я считаю, что такой подход компиляции проектов в модули npm, которые могут быть использованы в других проектах, напоминает
.dll
на.NET
мире. Я вполне мог представить себе проекты, организованные в решении в VS-коде, где каждый проект создает пакет npm, который затем может использоваться в другом проекте в решении в качестве зависимости.так как мне потребовалось довольно много времени, чтобы понять это, я * в случае если кто-то застрял здесь.
я также опубликовал его для закрытой ошибки на: https://github.com/npm/npm/issues/11546
этот пример был загружен в Github:vchatterji/tsc-seed
рекомендуемый способ в 2018 году с Typescript 2.x:
- создать свой проект, как обычно (с тестами и все)
- добавить
declaration: true
доtsconfig.json
для создания typings.- экспорт API через
index.ts
- на
package.json
, укажите на сгенерированные типы. Например, если вашoutDir
иdist
, затем добавить"types": "dist/index.d.ts"
к вашему пакету json.- создать
.npmignore
в игнор ненужные файлы (например, источник).- опубликовать в npm с
npm publish
. Используйте спецификации semver для обновлений (исправление / исправление ошибокnpm version patch
, не нарушая дополненияnpm version minor
, нарушение изменений apinpm version major
)так как это заставило меня некоторое время просеять все устаревшие ресурсы по этой теме в интернете (например, на этой странице...) Я решил завернуть его в how-to-write-a-typescript-library С последней работой минимальный пример.
Я в основном следую предложению Варун Чаттерджи
но я хотел бы показать полный пример с модульным тестированием и охватом кода и опубликовать его в
npm
и импортировать их с помощьюjavascript
илиtypescript
этот модуль написан с использованием
typescript 2.2
и важно настроитьprepublish
крючок для компиляции кода с помощьюtsc
прежде чем опубликовать его npm
можно использовать autodts для обработки распределения и использования
.d.ts
файлы из npm также без поддержки из IDE Atom.
autodts generate
будет связывать все ваши собственные.d.ts
файлы вместе для публикации на npm, иautodts link
обрабатывает ссылки на другие установленные пакеты, которые не всегда могут быть непосредственно подnode_modules
в более крупном проекте разделить на несколько подпакетов.обе команды считывают свои настройки из
package.json
иtsconfig.json
в "Конвенции над конфигурацией " стиль.здесь еще один ответ на stackoverflow и A блоге С более подробной информацией.
вместо определения типа следует опубликовать исходные источники машинописного текста. В
package.json
пусть свойство 'types' указывает на *.файл ТС.
*.d.ts
хорошо аннотировать существующие JS-библиотеки, но как потребитель я бы предпочел прочитать код typescript, чем переключаться между определениями типов и нисходящим, сгенерированным JS-кодом.
в Lossless мы создали инструмент one stop TypeScript dev для пакетов npm:https://gitzone.gitlab.io/npmts/