Начиная с 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 / пакет / простой-узел-пакет