Я работаю над своим первым модулем NPM. Раньше я кратко работал с машинописным текстом, и большая проблема заключалась в том, что для многих модулей не было доступных файлов определений. Поэтому я подумал, что было бы неплохо написать свой модуль на машинописном тексте.
Однако я не могу найти никакой информации о том, как это лучше всего сделать. Я нашел связанный вопрос « Могу ли я написать пакет npm в coffeescript? », Где люди предлагают публиковать только файлы javascript. Но в отличие от файлов coffeescript, файлы машинописного текста могут быть полезны, если они используются в приложении машинописного текста.
Должен ли я включать файлы Typescript при публикации модуля NPM или я должен публиковать только файлы javascript и предоставлять сгенерированные файлы .d.ts в DefinentyTyped?
источник
Ответы:
Вот пример модуля Node, написанного на TypeScript: https://github.com/basarat/ts-npm-module
Вот образец проекта TypeScript, который использует этот образец модуля https://github.com/basarat/ts-npm-module-consume
В основном вам необходимо:
commonjs
иdeclaration:true
.d.ts
файлА потом
.d.ts
.Atom-TypeScript просто обеспечивает хороший рабочий процесс вокруг этого: https://github.com/TypeStrong/atom-typescript#packagejson-support
источник
tsconfig.json
, но, на мой взгляд, это слишком вручную.В TypeScript 3.x или TypeScript 2.x следующие шаги описывают, что вам нужно сделать для создания библиотеки (пакета npm) с TypeScript:
declaration: true
чтобыtsconfig.json
генерировать набор текста.index.ts
package.json
, укажите на созданные вами типы. Например, если у васoutDir
естьdist
, добавьте"types": "dist/index.d.ts"
в свой пакет json.package.json
укажите на свой основной входной файл. Например, если у васoutDir
есть,dist
а основной входной файл - этоindex.js
, добавьте"main": "dist/index.js"
в свой package.json..npmignore
чтобы игнорировать ненужные файлы (например, источник).npm publish
. Используйте спецификации semver для обновлений (исправление исправлений / ошибокnpm version patch
, неразрывные дополненияnpm version minor
, критические изменения apinpm version major
)Так как у меня появилось время, чтобы просмотреть все устаревшие ресурсы по этой теме в Интернете (например, на этой странице ...), я решил обернуть это в библиотеке how-to-write-a-typescript с помощью актуальный рабочий минимальный пример.
источник
.npmignore
файл, чтобы указать npm, какие файлы игнорировать при публикации (.ts
файлы), и a,.gitignore
чтобы указать git, какие файлы игнорировать (dist/
)Это более свежий ответ с использованием TypeScript 1.8.10:
Моя структура проекта:
Я добавил следующее,
.npmignore
чтобы избежать включения посторонних файлов и сохранить минимум для импорта и работы пакета:У меня
.gitignore
есть:У меня
package.json
есть:Сейчас бегу:
npm pack
Результирующий файл (в распакованном виде) имеет следующую структуру:
Теперь я перехожу к проекту, где хочу использовать его как библиотеку, и набираю:
npm install ./project-1.0.0.tgz
Устанавливается успешно.
Теперь я создаю файл
index.ts
в своем проекте, в котором только что установил npmimport Project = require("project");
Печатание
Project.
дает мне возможности Intellisense, что и было целью всего этого упражнения.Надеюсь, это поможет кому-то еще в использовании своих проектов TypeScript npm в качестве внутренних библиотек в своих более крупных проектах.
PS: Я считаю , что такой подход составления проектов по НПМ модулям , которые могут быть использованы в других проектах , напоминает
.dll
в.NET
мире. Я вполне мог представить себе проекты, организованные в решение в VS Code, где каждый проект создает пакет npm, который затем может использоваться в другом проекте в решении в качестве зависимости.Поскольку мне потребовалось изрядное количество времени, чтобы понять это, я опубликовал его на случай, если кто-то здесь застрянет.
Я также разместил его для закрытой ошибки по адресу: https://github.com/npm/npm/issues/11546
Этот пример загружен на Github: vchatterji / tsc-seed
источник
Вам следует публиковать исходные тексты машинописных текстов вместо определения типа. В
package.json
Пусть точка свойства «типов» в * .ts файл.*.d.ts
хороши для аннотирования существующих JS-библиотек, но как потребитель я бы предпочел читать машинописный код, чем переключаться между определениями типов и сгенерированным JS-кодом с пониженным уровнем.источник
*.d.ts
является рекомендуемым способом сделать это, хотя я согласен с вами в преимуществах включения*.ts
файлов, typescriptlang.org/docs/handbook/declaration-files/…Я в основном следую предложению Варуна Чаттерджи
Но я хотел бы показать полный пример с модульным тестированием и покрытием кода, а также опубликовать его
npm
и импортировать с помощьюjavascript
илиtypescript
Этот модуль написан с использованием,
typescript 2.2
и важно настроитьprepublish
ловушку для компиляции кода с использованием,tsc
прежде чем публиковать его в npm.https://github.com/sweetim/haversine-position
https://www.npmjs.com/package/haversine-position
источник
Вы можете использовать autodts для обработки распространения и использования
.d.ts
файлов из npm также без поддержки со стороны Atom IDE.autodts generate
.d.ts
объединит все ваши собственные файлы вместе для публикации на npm и будетautodts link
обрабатывать ссылки на другие установленные пакеты, которые не всегда могут находиться непосредственноnode_modules
в большом проекте, разделенном на несколько подпакетов.Обе команды читают свои настройки из
package.json
иtsconfig.json
в «конвент по конфигурации» стиль.Есть еще один ответ на stackoverflow и сообщение в блоге с более подробной информацией.
источник
В Lossless мы создали универсальный инструмент разработки TypeScript для пакетов npm: https://gitzone.gitlab.io/npmts/
источник