Публикуйте с помощью NPM и используйте инструменты CLI

внешний интерфейс NPM

Эта статья — одна из трех статей об использовании Node.js.Инструменты, который в основном объясняет учебные пособия, опубликованные инструментом интерфейса командной строки NPM (CLI). Объекты, подходящие для чтения, включают:

  • Не знаком с инструментами NPM и скриптами Node.
  • Не знаю, как сделать общий инструмент CLI
  • Будет просто публиковать и использовать пакеты NPM

Советы: Это старая статья по относительно старому своду знаний, написанная 2 года назад,Только для новичков в грамоте. Полный адрес репозитория исходного кодаziyi2/npm-cli-package.

Услуги можно посмотретьКраткая дискуссия по выбору технических решений на базе фреймворка Express.

Скрипт узла

В проекте мы часто используем некоторые команды сценария Node для упрощения рабочей нагрузки разработки, такие как команды сценария NPM библиотеки компонентов Element. build:file(Используйте скрипт для создания входных исходных файлов для сборок Webpack).

Команда Simple Node Script может решить срочность, но если функция относительно сложна, есть много людей повторно используют (например, для привязки лесов или многопользовательский), могут возникнуть следующие проблемы:

  • Плохая ремонтопригодность (сохранение исторических функций/зависимостей/версий и т. д.)
  • папка проекта загрязнения
  • Увеличьте затраты на коммуникацию при разработке

Советы: Как интервьюер, вы часто можете видеть, что компонент xxx разрабатывается или поддерживается в резюме.В это время вы просто спросите, как этот компонент может быть повторно использован несколькими людьми, и некоторые интервьюеры ответят, что копируют вручную...

Для решения вышеуказанных проблем, порожденных командой скрипта Node, можно реализовать универсальный комплект CLI в виде пакета NPM.

менеджер пакетов npm

Диспетчер пакетов NPM позволяет пользователям загружать свои собственные общие пакеты или инструменты CLI на сервер NPM, а другим разработчикам нужно только загрузить и установить инструменты CLI локально, чтобы использовать их.

Следует отметить, что установку пакетов NPM можно разделить на два способа: локальный и глобальный. Использование локальной установки может добавить опубликованный инструмент CLI в список зависимостей разработки проекта. Глобальная установка связывает команды инструмента NPM CLI с глобальной средой выполнения.

Советы: локальная установка, скорее всего, будет использоваться в проекте вместе со сценариями NPM и может укрепить функциональную версию инструмента. Использование глобальной установки больше для выполнения аналогичных функций инициализации, таких как vue-cli, create-react-app, express-generator и т. д. В это время скрипт Node не будет имплантироваться в проект, а храниться в пользовательский файл операционной системы в папке.

Наиболее распространенные инструменты CLI, которые вы можете найти, следующие:

Далее подробно объясняется, как создать, опубликовать, установить и использовать простой инструмент CLI.

инструменты командной строки

Построить

Сначала создайте новый файл проекта для инструмента NPM CLI и выполнитеnpm initсоздание командыpackage.jsonФайл описания, нужно ввестиназвание проекта,Версия,описывать,файл входа в проект(Не требуется для публикации инструментов CLImainинформация о полях, которая в основном используется для публикации пакетов библиотек),Информация об автореЖдать:

AppledeMacBook-Pro:npm-cli-package ziyi2$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (npm-cli-package) 
version: (1.0.0) 
description: NPM CLI 工具的发布和使用
entry point: (index.js) 
test command: 
git repository: (https://github.com/ziyi2/npm-cli-package.git) 
keywords: npm cli
author: ziyi2
license: (ISC) 
About to write to /Users/ziyi2/Git/npm-cli-package/package.json:

{
  "name": "npm-cli-package",
  "version": "1.0.0",
  "description": "NPM CLI 工具的发布和使用",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/ziyi2/npm-cli-package.git"
  },
  "keywords": [
    "npm",
    "cli"
  ],
  "author": "ziyi2",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/ziyi2/npm-cli-package/issues"
  },
  "homepage": "https://github.com/ziyi2/npm-cli-package#readme"
}


Is this OK? (yes) 

Советы: NPM сам по себе является инструментом командной строки.

Генерируется после ввода информацииpackage.jsonФайл описания выглядит следующим образом:

{
  "name": "npm-cli-package",
  "version": "1.0.0",
  "description": "NPM  CLI 工具的发布和使用",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/ziyi2/npm-cli-package.git"
  },
  "keywords": [
    "npm",
    "cli"
  ],
  "author": "ziyi2",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/ziyi2/npm-cli-package/issues"
  },
  "homepage": "https://github.com/ziyi2/npm-cli-package#readme"
}

Во-вторых, вам нужно настроить исполняемый файл пути PATH, вpackage.jsonконфигурацияbinатрибут, который соответствует пути к исполняемому файлу. Например, будетbinСоответствующий путь к исполняемому файлу настроен как в текущем проектеsrc/index.js:

"bin": {
   // npm-cli-package 是一个可执行的命令,该命令指向了 src/index.js 脚本
   // 这里暂时还不清楚该脚本的环境解释器
   "npm-cli-package": "src/index.js"
 },

Советы: при выполненииnpm linkИли при установке инструмента CLI NPM будетbinСконфигурированный файл создает программную ссылку. Для систем Windows глобальная установка по умолчаниюC:\Users\{username}\AppData\Roaming\npmкаталог, локальная установка будет в каталоге проекта./node_modules/.binПод содержанием.

настроитьbinПосле того, как вы укажете путь к модулю, вы можете приступить к разработке исполняемого файла. Чтобы входной файл использовал Node в качестве интерпретатора, необходимо в начале файла написать#! /usr/bin/env node, цель состоит в том, чтобы использовать env для поиска пути запуска Node в операционной системе и использовать Node в качестве интерпретатора среды для исполняемого файла. Например, вsrc/index.jsФайл входа записывает скрипт Node, который выводит информацию:

#! /usr/bin/env node
console.info('npm-cli-package:', '1.0.0')

Советы: некоторые переменные среды включены в env, в том числе пути выполнения некоторого программного обеспечения, которое мы установили, и т. д. Таким образом, env можно использовать для поиска путей выполнения Node в разных операционных системах, чтобы файлы могли нормально интерпретироваться и выполняться.

мягкая ссылка

После завершения разработки инструмента CLI следующим шагом является проверка возможности его нормального использования.npm linkКоманда связывает его с глобальной средой выполнения, делая инструмент CLI доступным из любого пути в системе. воплощать в жизньnpm link:

// Windows
PS C:\Users\ziyi2\Desktop\npm-cli-package> npm link
up to date in 0.428s
C:\Users\ziyi2\AppData\Roaming\npm\npm-cli-package -> C:\Users\ziyi2\AppData\Roaming\npm\node_modules\npm-cli-package\src\index.js
C:\Users\ziyi2\AppData\Roaming\npm\node_modules\npm-cli-package -> C:\Users\ziyi2\Desktop\npm-cli-package

// MAC OS X
AppledeMacBook-Pro:npm-cli-package ziyi2$ npm link
npm notice created a lockfile as package-lock.json. You should commit this file.
up to date in 4.113s
found 0 vulnerabilities

/usr/local/bin/npm-cli-package -> /usr/local/lib/node_modules/npm-cli-package/src/index.js
/usr/local/lib/node_modules/npm-cli-package -> /Users/ziyi2/Git/npm-cli-package

при исполненииnpm linkПосле этого вы можете видеть, что эта команда в основном делает две вещи под Mac:

  • для исполняемого файлаsrc/index.jsСоздайте мягкую ссылку, свяжите ее с/usr/local/bin/<package>(Под Windows этоC:\Users\{username}\AppData\Roaming\npm\<package>)
  • Создайте программную ссылку для текущего проекта, связав его с/usr/local/lib/node_modules/<package>(Под Windows этоC:\Users\{username}\AppData\Roaming\npm\node_modules\<package> )

Так что выполняйте в глобальной средеbinПри настройке команды Node будет разрешено выполнять соответствующий исполняемый файл.

Советы:еслиbinНе настраивайте имя выполняемой команды, оно будет использоваться по умолчанию.pageage.jsonсередина<name>поля как команды.

Выполнить в любом месте в это времяnpm-cli-packageЗаказ:

AppledeMacBook-Pro:npm-cli-package ziyi2$ npm-cli-package
npm-cli-package: 1.0.0

Можно обнаружить, что любой путь за пределами текущего проекта может использовать эту команду для успешной печати информации, что указывает на то, что и интерпретатор узла, и программная ссылка установлены успешно.

Советы: Системы Windows можно найти в пользовательском каталоге.C:\Users\{username}\AppData\Roaming\npm\node_modulesПосмотреть нижеnpm-cli-packageпрограммную ссылку на пакет, которую можно найти по адресуC:\Users\{username}\AppData\Roaming\npmнайти вnpm-cli-package(оболочка) иnpm-cli-package.cmd(Cmd) две исполняемые файлы.

выпускать

пройти черезnpm linkА также использование командной строки, я обнаружил, что нет проблем с дизайном инструмента.В настоящее время я хочу поделиться им с другими.В настоящее время я могу использовать механизм выпуска пакета NPM управляющий делами. Перед публикацией инструмента его необходимоофициальный сайт НПМЗарегистрировать аккаунт. После успешной регистрации используйте в командном терминалеnpm loginСвяжите свой зарегистрированный аккаунт (npm loginИнформация о сертификате входа в учетную запись будет сохранена на локальном компьютере, поэтому вам не нужно будет снова входить в учетную запись), а информация токена вашего текущего входа будет сгенерирована на веб-сайте NPM.npm whoamiКоманда для просмотра текущего имени учетной записи входа.

Советы: Не используйте зеркальный адрес NPM Taobao при входе в систему, вам необходимо использовать официальный адрес NPM, доступ к которому можно получить черезnpm config set registry https://registry.npmjs.org/Для команды задан официальный адрес выпуска пакета NPM.

AppledeMacBook-Pro:~ ziyi2$ npm login
Username: ziyi222
Password: 
Email: (this IS public) 673191402@qq.com
Logged in as ziyi222 on https://registry.npmjs.org/.

npm loginПосле этого информация о токене будет сгенерирована на официальном сайте NPM, а затем использованаnpm publishИнструмент командной строки CLI:

AppledeMacBook-Pro:npm-cli-package ziyi2$ npm-cli-package
npm-cli-package: 1.0.0
AppledeMacBook-Pro:npm-cli-package ziyi2$ npm publish
npm notice 
npm notice 📦  npm-cli-package@1.0.0
npm notice === Tarball Contents === 
npm notice 595B   package.json
npm notice 12.1kB README.md   
npm notice 64B    src/index.js
npm notice === Tarball Details === 
npm notice name:          npm-cli-package                         
npm notice version:       1.0.0                                   
npm notice package size:  5.1 kB                                  
npm notice unpacked size: 12.8 kB                                 
npm notice shasum:        624e3e45667da53d474418907d3250336b56208b
npm notice integrity:     sha512-b77RbfmmF+Gjf[...]MSbp9PL4UUE9w==
npm notice total files:   3                                       
npm notice 
+ npm-cli-package@1.0.0

В это время проверьте информацию о личной учетной записи на официальном сайте NPM, и вы обнаружите, что инструмент был выпущен.1.0.0Версия.如果需要发布Объем пакета, необходимо создать организацию на официальном сайте NPM (например, использовать в качестве организации аккаунт ziyi222, затем переименовать аккаунт ziyi222 в ziyi222222, и снова войти в аккаунт):

AppledeMacBook-Pro:npm-cli-package ziyi2$ npm login
Username: ziyi222222
Password: 
Email: (this IS public) 673191402@qq.com
Logged in as ziyi222222 on https://registry.npmjs.org/.

перередактироватьpackage.jsonКонфигурационный файл:

{
  "name": "@ziyi222/npm-cli-package",
  // ...
  "publishConfig": {
    "access": "public"
  }
}

использоватьnpm publishвыпускать:

AppledeMacBook-Pro:npm-cli-package ziyi2$ npm publish
npm notice 
npm notice 📦  @ziyi222/npm-cli-package@1.0.1
npm notice === Tarball Contents === 
npm notice 653B   package.json
npm notice 12.1kB README.md   
npm notice === Tarball Details === 
npm notice name:          @ziyi222/npm-cli-package                
npm notice version:       1.0.1                                   
npm notice package size:  5.1 kB                                  
npm notice unpacked size: 12.8 kB                                 
npm notice shasum:        fac560a42c43d276c9fee17c21887bedaf34bad1
npm notice integrity:     sha512-j/QScEgX+glfS[...]OxhhZcIavUhfg==
npm notice total files:   2                                       
npm notice 
+ @ziyi222/npm-cli-package@1.0.1

Установить и использовать

Разработчики проходятnpm installКоманда для глобальной установки инструмента:

AppledeMacBook-Pro:npm-cli-package ziyi2$ npm install npm-cli-package -g
/usr/local/bin/npm-cli-package -> /usr/local/lib/node_modules/npm-cli-package/src/index.js
+ npm-cli-package@1.0.0
updated 1 package in 12.977s

Из информации об установке для печати можно узнать, что окончательная ссылка на скрипт инструмента CLI указывает на/usr/local/bin/npm-cli-package. После успешной установки команды, заданные CLI, можно использовать в проекте.

наконец

Это всего лишь простой учебный пример, реальный инструмент CLI, возможно, должен учитывать некоторые из следующих функций:

  • Справочная информация: используется для печати поддерживаемых команд, параметров опций и т. д.
  • Информация о версии: используется для информирования пользователей о текущей версии CLI.
  • Обнаружение среды: используется для обнаружения поддерживаемых в настоящее время версий интерпретатора (узла) и т. д.
  • Панель взаимодействия: предоставляет параметры для текущей команды.
  • Печать информации: обеспечивает печать информации в различных семантических цветах.
  • ...

Поэтому вам могут понадобиться некоторые дополнительные функциональные зависимости, например:

  • commander.js - node.js command-line interfaces made easy
  • chalk - Terminal string styling done right
  • Inquirer - A collection of common interactive command line user interfaces
  • node-semver - The semver parser for node (the one npm uses)
  • ...

Реальная сила разработки инструментов CLI заключается в том, что вы можете использовать все возможности, которые поддерживает Node (например, общие файловые системы, http-сервисы и т. д.), так что у разработчиков есть множество возможностей для игры:

  • Например, генерация проектов строительных лесов в один клик.
  • Например, генерация/изменение исходных файлов в один клик.
  • Например, поддержка различных платформ управления, которые предоставляют открытые API (такие как Mock, I18N, управление пакетами тем и т. д.) для достижения синхронизации информации между локальными проектами и платформами.
  • Например, генерация в один клик информации о файлах конфигурации, таких как Webpack/Babel/Git Hook.
  • ...

Кроме того, если разработанный инструмент CLI недостаточно удобен для разработчика, вы также можете разработать инструмент, аналогичныйvue uiИнструменты графического интерфейса для улучшения пользовательского опыта разработки (например, перед сотрудничеством с коллегами для разработкиlego uiинструмент для создания страниц классического макета вашего проекта одним щелчком мыши).

Набор небольшой рекламы (телефонный столб серии о бесплодии)

Привет всем, мы являемся недавно созданным бизнес-отделом DingTalk BU по связям с государственными органами Alibaba (код здоровья, используемый студентами в Ханчжоу, является совместным проектом моего BU и других BU), и все еще существует большое количество вакансий в веб-интерфейсе. . Студенты, которые хотят найти меня для внутреннего продвижения по службе или хотят узнать больше информации о наборе, могут добавить меня в WeChat: 18768107826