Начиная с NPM

Создадим наш первый модуль Node.js

NPM - это менеджер пакетов Node.js, и все пакеты хранятся в общедоступном реестре: https://registry.npmjs.org. Но чтобы найти его, воспользуйтесь сайтом https://npmjs.org/. NodeJs представил этот менеджер, начиная с версии 0.6.3. Он управляет зависимостями и другими конфигурациями через package.json файл. Сегодня существует минимум 560К + пакетов: это много!

Вы также можете хранить пакеты в частном реестре NPM: полезно на предприятиях.

предпосылки

Чтобы использовать NPM, нам нужно установить Node.js, если это еще не сделано.

Вы можете sudo apt-get install nodejs nodejs-dev nodejs-legacy в Ubuntu или скачать Node.js.

поиск в реестре

Вы можете захотеть, чтобы пакет делал что-то

поищи сначала в реестре, наверное кто-то над этим работал.

Найдите пакет на https://npmjs.org/

Если нет, найдите имя для своего пакета и проверьте, не занято ли оно уже:

$ npm view my-package
npm ERR! 404 Registry returned 404 for GET on http://registry.npmjs.org/

Если npm отображает ошибку 404, пакет не существует, вы можете его создать.

создать свой репозиторий

Перед созданием пакета начните создавать репозиторий на github или другом менеджере репозиториев. Затем клонируйте его в свой рабочий каталог:

$ mkdir my-first-npm-package
$ cd my-first-npm-package
$ git clone [email protected]:USER/my-first-npm-package.git

Первый скрипт с узлом

Вы можете выполнить файл javascript, используя узел следующим образом:

$ node index.js
simple-node-package started

где index.js содержит:

console.log('simple-node-package started');

Как видим, сообщение simple-node-package started зарегистрировано. Итак, используйте этот способ для создания сценария, который что-то сделает прямо сейчас. Представить :

$ node display-the-date.js
2017-09-27T14:21:01.755Z

где display-the-date.js содержит:

console.log(new Date());

Теперь выполните сценарий, используя REPL в Node.js.

Это запрос Javascript под названием REPL для R ead E val P rint L oop. .

Он работает так же, как и консоль javascript вашего браузера, но с функциями узла. Самое важное, что нужно знать, - это импорт вашего модуля с require('./file.js'). Он загружает ваш файл javascript. Просто сделать :

$ node
> var module = require('./index.js');
simple-node-package started
undefined

Отображается то же сообщение журнала.

Дважды нажмите CTRL + C, чтобы выйти из REPL.

(выйдите перед повторной попыткой, если вы измените сценарий).

Будьте осторожны: require - это функция, которая синхронно загружает указанный модуль.

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

> var module = require('./index.js');
simple-node-package started
undefined
> var module = require('./index.js');
undefined

В зависимости от вашего кода у вас могут возникнуть некоторые побочные эффекты, если вы введете неправильный код.

Экспорт некоторых вещей

Теперь есть волшебное ключевое слово с узлом: module.exports или exports. Он позволяет экспортировать все, что вы хотите, например литерал, объект, функцию, ... Попробуйте использовать index.js:

module.exports = 'myExport';

И импортируйте его:

$ node
> var module = require('./index.js');
simple-node-package started
undefined
> module
'myExport'

Здесь module равно 'myExport' строке.

Теперь представьте, что вы экспортируете функцию:

module.exports = function(moduleArgument) {
    console.log('moduleArgument is', moduleArgument);
    return 'moduleResult';
};

И попробуйте:

$ node
> var module = require('./index.js');
simple-node-package started
undefined
> module
[Function]

Мы видим, что module - это (наша) функция, и если мы выполним ее с аргументом 'moduleParameter':

> module('moduleParameter')
moduleArgument is moduleParameter
'moduleResult'

В журнале есть сообщение, указывающее на наш первый аргумент и возвращаемое значение 'moduleResult'

Более полезный скрипт

Теперь мы экспортируем что-то более полезное: модуль с некоторыми служебными функциями, функциями сложения и умножения. Начнем с нашего index.js файла:

module.exports = function (coefficient) {
    // no coefficient means coefficient of 1
    if (!coefficient && coefficient !== 0) {
        coefficient = 1;
    }
    console.log('moduleArgument coefficient is', coefficient);
    this.coefficient = coefficient;
    return {
        addition: addition.bind(this),
        multiplication: multiplication.bind(this)
    }
};
function addition(x, y) {
    return this.coefficient * (x + y);
}
function multiplication(x, y) {
    return this.coefficient * x * y;
}

Здесь функция, используемая для модуля, возвращает объект функций:

{
    addition: addition.bind(this),
    multiplication: multiplication.bind(this)
}

Таким образом, после импорта нашего модуля с параметром coefficient вы можете вызывать функции addition или multiplication.

Попробуем использовать:

> var module = require('./index.js');
simple-node-package started
undefined
>
> module().addition(1,1)
moduleArgument coefficient is 1
2
> module(2).addition(1,1)
moduleArgument coefficient is 2
4
> var coef4 = module(4)
moduleArgument coefficient is 4
undefined
> coef4.multiplication(2,2)
16

Наконец, наш параметр модуля coefficient полезен для всего нашего модуля, и мы получаем выгоду от этих двух функций, которые вы можете использовать где угодно, даже в другом модуле NPM.

создать пакет

Теперь мы готовы создать пакет с npm init. Не забудьте добавить README.md: он появится в реестре NPM для описания пакета. Он задаст несколько вопросов, таких как имя пакета, версия, описание, автор, ключевые слова и репозиторий:

$ 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> --save` afterwards to install a package and
  save it as a dependency in the package.json file.
  
  Press ^C at any time to quit.
  name: (simple-node-package) simple-node-package
  version: (1.0.0) 0.0.0
  description: simple node module with an addition and a multiplication methods
  entry point: (index.js)
  test command:
  git repository: (https://github.com/kirakishin/simple-node-package.git)
  keywords: addition, multiplication
  author: **@**
  license: (ISC) MIT
  About to write to C:\git\github\kirakishin\simple-node-package\package.json:
  
  {
    "name": "simple-node-package",
    "version": "0.0.0",
    "description": "simple node module with an addition and a multiplication methods",
    "main": "index.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1"
    },
    "repository": {
      "type": "git",
      "url": "git+https://github.com/kirakishin/simple-node-package.git"
    },
    "keywords": [
      "addition",
      "multiplication"
    ],
    "author": "**@**",
    "license": "MIT",
    "bugs": {
      "url": "https://github.com/kirakishin/simple-node-package/issues"
    },
    "homepage": "https://github.com/kirakishin/simple-node-package#readme"
  }
  
  
  Is this ok? (yes) yes

По завершении создается файл package.json. Вы можете отредактировать его, изменив название или добавив несколько тестов.

Теперь возьмем наш предыдущий скрипт display-the-date.js:

$ node display-the-date.js
2017-09-27T14:21:01.755Z

Итак, вы можете выполнить его через сценарий NPM, добавив сценарий start в package.json:

{
  [...]
  "scripts": {
    "start": "node display-the-date.js"
  },
  [...]
}

И попробовать :

$ npm start
> [email protected] start /home/kirakishin/simple-node-package
> node display-the-date.js
2017-09-27T14:21:01.755Z

опубликуйте свой пакет

Если вы никогда не использовали публичный реестр NPM, вы должны добавить свою учетную запись:

$ npm adduser <USER>

Теперь добавьте новые файлы и зафиксируйте их:

$ git add index.js package.json README.md display-the-date.js
$ git commit -a -m "chore(init): first init"
$ npm version minor
$ git push && git push --tags

Затем опубликуйте свой пакет в реестре:

npm publish

это все !

Несколько слов

В мире с открытым исходным кодом сначала проверьте, сделал ли кто-нибудь уже то, что вы хотите. Если нет, сделайте это и поделитесь!

Мы увидели, как создать модуль узла, использовать его и опубликовать:

  • NPM - это менеджер пакетов, входящий в состав Node.js.
  • https://npmjs.org/ - это веб-сайт NPM, на котором можно найти пакеты в реестре NPM.
  • http://registry.npmjs.org/ - это реестр NPM, в котором хранятся пакеты.
  • вы также можете использовать частный реестр NPM внутри своей организации.
  • запустить скрипт узла с node script.js
  • экспортирует вещи из вашего модуля с module.exports = 'exportedThing'
  • используйте REPL с узла для отправки таких команд, как console.log('hello')
  • используйте var module = require('./index.js') для импорта модуля из index.js
  • затем используйте его с var ask = module(42); var response = ask.bigQuestion('all')
  • и увидеть ответ на все во вселенной

На github: https://github.com/kirakishin/simple-node-package
Пакет на NPM: https: //www.npmjs .com / пакет / простой-узел-пакет

узнать больше