Вы - младший разработчик, недавно начавший работать в экосистеме JavaScript. Здесь так много всего, что вы даже не представляете, с чего начать. Может попробовать React? Это классная библиотека, надо попробовать. Почему это не работает?
Я обнаружил, что быть частью экосистемы - это самый быстрый способ понять это. Вот почему в этой статье вы узнаете, как опубликовать пакет npm и как можно быстрее заставить его работать в ваших проектах.
Мы будем использовать babel и webpack 4 для доставки компактного и идиоматического кода JavaScript.
Вы можете клонировать репозиторий, содержащий весь код из этой статьи, и следовать его указаниям или начать с нуля.
git clone [email protected]:vmarchesin/how-to-publish-a-npm-package.git
Код разделен на четыре части, и я объясню, где мы находимся в каждой точке. Если вы заблудились, просто прыгайте в следующую ветку, и вы наверняка наверстаете упущенное. В ветви master есть готовый к отправке пакет.
Шаг первый
Во-первых, нам нужно установить наши зависимости. Мы будем использовать babel и webpack, которые я рекомендую для каждого проекта. Вы увидите, что наша библиотека настолько проста, что в этом нет необходимости, но мы делаем это в учебных целях.
Если вы не пользуетесь моим образцом, рекомендуется заранее настроить репозиторий Github для вашего пакета npm. Вы можете узнать, как его создать здесь.
Запустите npm init
в каталоге git и следуйте инструкциям. Если вы не знаете, что ввести в поле, просто оставьте его пустым.
Установите все зависимости, запустив:
npm i -D @babel/core babel-loader webpack webpack-cli
npm i
- это сокращение для npm install
, а -D
- сокращение для --save-dev
, что означает, что вы сохраните их как зависимости разработчика (они не будут поставляться с вашим кодом).
Также давайте создадим .gitignore
файл, чтобы случайно не зафиксировать папку node_modules
. Просто добавьте node_modules
в .gitignore
файл, и все готово.
Хорошая практика - добавить README.md
файл, чтобы люди знали, о чем ваша библиотека. Создай.
Если вы хотите перейти к этому моменту, просто проверьте ветку step/one
. Если вы сделаете это вместо того, чтобы устанавливать пакеты самостоятельно, не забудьте запустить npm i
, чтобы установить все.
Шаг второй
Пришло время написать нашу библиотеку. Давайте реализуем генератор случайных чисел. Назовем его choice
в честь Python, хотя он не имеет ничего общего с самим методом Python.
Наша файловая структура должна выглядеть так:
|-src/ | | bool.js | | float.js | | index.js | | integer.js | .gitignore | LICENSE | README.md | package-lock.json | package.json
Если у вас нет файла LICENSE
, не беспокойтесь. Вы можете скопировать мою и просто изменить копирайт на свое имя. Лицензия MIT - это очень разрешительная лицензия, которая позволяет людям свободно копировать и / или изменять ваш код, если они ссылаются на исходный источник. Вы можете использовать любую лицензию, какую пожелаете.
Код для каждого файла внутри src/
должен выглядеть следующим образом.
Мы экспортируем метод choice
, который ожидает аргументы max
, min
и options
. Если мы передадим { float: true }
в качестве объекта параметров, мы получим случайное число с плавающей запятой, если мы передадим { bool: true }
, мы получим логическое значение, а если мы ничего не передадим, мы получим целое число.
Мы можем использовать синтаксис import
и export
, потому что мы используем babel. Мы еще не настроили его, но сделаем следующий шаг.
Если вы хотите перейти к этому моменту, просто загляните в ветку step/two
.
Шаг третий
Пришло время создать наш пакет. На этом этапе вы можете просто отправить папку src
, и она будет работать большую часть времени (наша не будет, потому что мы используем import
и export
, но вы можете просто изменить на require
и module.exports
, чтобы она работала). Мы можем добиться большего.
Webpack - это сборщик модулей, а это означает, что он лучше, чем вы, эффективно отправляет код. Он минимизирует и, вместе с загрузчиком babel, перенесет ваш код для экспорта в виде CommonJS
модуля. CommonJS определяет формат модуля и делает его читаемым в большинстве сред JavaScript.
Мы поместим конфигурацию нашего веб-пакета в файл с именем webpack.config.js
.
Мы только что определили конфигурацию нашего веб-пакета. mode: 'production'
позволяет различные улучшения производительности в нашем последнем пакете. entry
определяет главный файл в нашем модуле, который является экспортируемым по умолчанию. output
определяет, куда будет экспортироваться наш модуль, в данном случае это будет файл dist/index.js
. Раздел rules
внутри module
сообщает webpack использовать babel-loader для всех .js
файлов, а раздел resolve
там, поэтому нам не нужно добавлять расширение файла в наши import
операторы.
Теперь, когда мы настроили webpack, нам нужно сообщить нашему package.json
, как собрать наш модуль. Убедитесь, что у вас внутри package.json
:
... "main": "dist/index.js", "scripts": { "build": "webpack --mode production" }, ...
Наш main
файл будет вызван, когда мы объявим наш модуль как зависимость. Как видите, это файл, созданный веб-пакетом. Также определите сценарий сборки.
Теперь просто запустите:
npm run build
Вы увидите, что папка dist
создана. Вы не хотите публиковать эту папку в своем репозитории Github, поэтому добавьте новую строку внутри вашего .gitignore
, говорящую, что вы не хотите, чтобы dist
был поставлен.
Если вы хотите перейти к этому моменту, просто загляните в ветку step/three
.
Шаг четвертый
Мы почти готовы опубликовать наш пакет! Теперь, прежде чем публиковать, нам нужно убедиться, что он работает. Мы можем использовать npm link
, чтобы проверить это. npm link
Создает виртуальную ссылку на модуль, имитируя npm install
.
Следуй этим шагам:
- Внутри каталога вашего модуля запустите
npm link
, чтобы создать виртуальную ссылку на этот модуль. - Найдите себе проект, над которым вы работаете, и запустите
npm link <your_module>
в его папке. Обратите внимание: имя вашего модуля не является именем каталога, в котором находится ваш модуль. Это имя, объявленное в вашемpackage.json
файле. - Импортируйте / потребуйте ваш модуль внутри вашего проекта и протестируйте его. Он будет рассматриваться, как если бы он был установлен как зависимость.
Если что-то не так, все, что вам нужно сделать, это обновить модуль и снова запустить npm run build
. Он автоматически обновит вашу виртуальную ссылку и отразит изменения в вашем проекте, чтобы вы могли ее протестировать.
Когда вы закончите, просто запустите npm unlink
внутри каталога модуля и npm unlink <your_module>
внутри каталога вашего проекта.
Если все работает, пора публиковать. Краткая версия:
- Создайте файл
.npmignore
- Создайте аккаунт на npmjs.com (если у вас его нет)
- Беги
npm login
- Запустите
npm publish
в каталоге вашего модуля
Давайте разберемся.
Создайте файл .npmignore
в корневой папке. Он действует так же, как .gitignore
, но сообщает npm, что вы хотите удалить из последнего модуля. Поместите src
и webpack.config.js
внутрь .npmignore
, поскольку мы не хотим, чтобы наш исходный код и конфигурация веб-пакета были связаны с нашим модулем.
Создайте аккаунт на npmjs.com, если у вас его еще нет. Он понадобится вам для публикации модуля под вашей учетной записью. После того, как учетная запись будет готова, запустите npm login
на своем компьютере и введите учетные данные.
Теперь внутри каталога вашего модуля запустите npm publish
. Он получит version
, определенный в вашем package.json
, и опубликует его в npm, используя ту же версию. Вы не можете публиковать повторно, используя ту же или предыдущую версию. Подробнее о версиях можно прочитать здесь.
Не забывайте строить перед публикацией. Если вы этого не сделаете, вы опубликуете пустой модуль.
Обновление статьи: Вы можете избежать этой проблемы, добавив prepublish
скрипт в свой package.json
. Это гарантирует, что сборка всегда будет запускаться перед публикацией пакета на случай, если вы забудете собрать его вручную. Просто добавьте сценарий в свой package.json
.
... "scripts": { ... "prepublish": "npm run build" }, ...
И еще одно: если вы попытаетесь опубликовать свой пакет с тем же именем, что и в этой статье, how-to-publish-a-npm-package
, это не сработает. Убедитесь, что имя пакета внутри вашего package.json
другое.
Если вы хотите перейти к этому моменту, просто загляните в ветку step/four
.
Готово!
Теперь вы можете установить свой модуль в любой проект! Найдите один и попробуйте:
npm i -S <your_package_name>
Вы также можете попробовать этот пакет:
npm i -S how-to-publish-a-npm-package
Вы также можете проверить пакет на npmjs.com:
А теперь иди и опубликуй. Сообщество открытого исходного кода ждет вас.
Вы можете найти меня на моем сайте. Спасибо, что прочитали эту статью.