4. Окружение

Языком программирования называют правила (лексические, синтаксические и семантические), по которым записывается исходный код.

Стандарт ECMAScript – документ, описывающий устройство языка и поведение во всех возможных ситуациях.

NPM

https://www.npmjs.com/

Пакет (Package) — базовая единица, которой управляет NPM как единым целым. Может содержать любое количество файлов и кода. NPM позволяет устанавливать пакеты, обновлять или удалять.

Реестр (Registry) — хранилище пакетов NPM. Каждый желающий может опубликовать пакет в npm registry, потратив буквально минуту, а остальные смогут его использовать. В хранилище на текущий момент сотни тысяч пакетов и их количество стремительно растет. Исходный код пакетов, как правило, хранится на гитхабе. Несмотря на это, пакеты в npm никак не связаны с git и github. 

sudo npm install -g имя_пакета // установка пакета
npm init // инициализация

{
  "name": "My Super Project",
  "version": "1.0.0",
  "description": "",
  "type": "module",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Ответы данные при инициализации хранятся в фале файл package.json и доступны для редактирования

По умолчанию код пакета создается внутри файла index.js, лежащего в корне проекта

npm publish – публикация пакета

Для успешной публикации должны выполниться два условия:

Имя пакета уникально. Если оно не уникально, то пакет опубликован не будет, что и понятно, ведь тогда станет невозможным разобраться, чей ставить пакет при указании этого имени.

Вы зарегистрированы на сайте https://www.npmjs.com/ и выполнили локально аутентификацию, запустив в командной строке npm login (синоним команды npm adduser). Такое требование важно с точки зрения безопасности. Пакет может публиковать только зарегистрированный пользователь, а обновлять — автор пакета.

npm info имя_пакета //информация о пакете

В случае обновления, версия нового пакета должна быть выше версии текущего опубликованного пакета.

npm publish —dry-run //публикация без добавления пакета в каталог. Размещенные таким образом пакеты можно устанвоить командой npm link. Для его удаления используйте команду npm unlink либо стандартный способ деинсталяции npm uninstall -g .

Версионирование

  • Первое число (1 в примере выше) — мажорная версия. Меняется только в случае серьезных изменений, как правило, ломающих обратную совместимость
  • Второе число (23 в примере выше) — минорная версия. Не должна ломать обратную совместимость (в идеале). Меняется при добавлении новых возможностей.
  • Третье число (5) — патч. Гарантировано не должна менять обратную совместимость (к сожалению, такое бывает). Меняется только при исправлении багов.

Зависимости

Как только в коде появляется импорт из сторонней библиотеки

import _ from 'lodash';

это подразуемевает зависимость.

После установки в проекте npm install lodash в package.json появится описание зависимости

"dependencies": {
  "lodash": "^4.17.15"
}

Отдельно устанавливаются пакеты, необходимые только во время разработки: npm install —save-dev jest. В package.json они выглядят так:

"devDependencies": {
  "jest": "^24.9.0",
  "jest-cli": "^24.9.0"
}

Секцию dependencies необходимо использовать для описания зависимостей, которые будут нужны при использовании программы, а devDependencies только для тестирования и локальной разработки.

Сами пакеты сохраняются в директорию node_modules, которую следует добавить в .gitignore

npm update – обновить зависимости

npm update name  — обновить отдельную библиотеку

dependencies {
  'package1': "*", // любая версия библиотеки
  'package2': "1.3.5",  // строгое указание версии
  'package3': "~2.3.4", // только обновления патчей – т.е. установится 2.3.10, но не установится 2.4.0
  'package4': "^2.3.4", // обновляются патчи и миноры, не обновляются мажорные версии
}

Зависимости зависимостей называются транзитивными.

Файл package-lock.json предназначен для записей версий установленных библиотек, в том числе транзитивных зависимостей. Это гарантирует запуск программы даже после долгого ее не использования, так как при запуске загрузятся те версии, которые были успешно совместимы в последний раз.

Eslint — это программа для проверки кода на соответствие стандартам кодирования

npx — специальная программа, которая автоматически устанавливается вместе с утилитой npm версии 5.2.0 и выше. Эта утилита меняет $PATH для конкретного вызова, добавляя туда путь ./node_modules/.bin.

npx <тут любая программа, установленная как локальный пакет NPM> <тут опции этой программы>
npm install --save-dev eslint
npx eslint --init
$ npx eslint .

Секция Scripts (https://docs.npmjs.com/misc/scripts) позволяет описывать произвольные команды, которые затем можно выполнять.

"scripts": {
  "test": "jest",
  "build": "NODE_ENV=production babel src --out-dir dist --source-maps inline",
  "prepublishOnly": "npm run build"
}

Babel

Babel — программа, которая берет указанный код и возвращает тот же код, но транслированный в старую версию JS.

https://babeljs.io/repl/

$ npm install --save-dev @babel/core @babel/cli @babel/node @babel/preset-env

Исходный код принято хранить в директории src в корне проекта, а код полученный в результате трансляции, — в директории dist.

"scripts": {
  "build": "NODE_ENV=production babel src --out-dir dist",
  "prepublishOnly": "npm run build"
}

.npmignore – для npm более приоритетный чем .gitignore

Модуль — один файл, а пакет — набор файлов, в которые входят модули и package.json

Импорт модуля

import { length } from './strings.js';
import factorial from './factorial.js';

Импорт пакета

import path from 'path';
import fs from 'fs';
import lodash from 'lodash';

Список всех модулей стандартной библиотеки: https://nodejs.org/api/modules.html

Точка входа по умолчанию index.js, но этом поведение можно изменить в package.json

{
  "main": "dist/index.js"
}

Исполняемые файлы

"bin": {
  "main": "dist/index.js"
}

You may also like...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *