NPM and ES Modules Flashcards

1
Q

What is NPM?

A

Node Package Manager e мениджър на JS пакети, които са публикувани от различни програмисти в общността.
Пакетите може да са единични файлове, JS библиотеки, или по-сложни колекции от библиотеки, цели JS frameworks.
Те решават различни проблеми и могат да се ползват от различни програмисти.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

What are the benefits of using it?

A

NPM пакетите се ползват, защото:

  1. се пести време - не е нужно да се написват отначало фунционалности, които вече са написани от друг програмист
  2. намаляваме вероятността от грешки, като преизползваме даден код
  3. осигуряваме си надеждност, като интегрираме пакет, който се използва от други разработчици, които гарантират, че кода е тестван за edge cases и ни позволява да се концентрираме върху нашата логика

Предимства на NPM:

  1. пакетите са open source и ние можем да разглеждаме кога и да се запознаем как работи
  2. повечето пакети са тествани и доказано са с работещ код
  3. повечето пакети се update - ват регулярно и всякакви грешки по кода се оправят и кода се подобрява
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

What is Node.js?

A

Node.js е сървърно приложение, създаващо среда за изпълнение на JS код, т.е. run time environment.
Node.js прави възможно изпълнението на JS код, директно на сървъра, когато обикновено JS се изпълнява в browser-а.
За да ползваме NPM трябва да имаме инсталиран Node.js.

Или:

Node.js is an open source server environment
Node.js is free
Node.js runs on various platforms (Windows, Linux, Unix, Mac OS X, etc.)
Node.js uses JavaScript on the server

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

What is the package.json file?

A

Когато сваляме пакет с npm, този пакет се сваля в папка node_modules в нашия проект.
NPM знае версиите на всички пакети, които използваме в проекта и ги запазва в специален файл - Package.json

package-lock.json - в него подробно се описват всички пакети, както и всички пакети на които зависят тези пакети, заедно с версиите на всички

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

How can create a package.json file?

A

To create a package.json file run the following comman in the bash terminal whithin the project’s folder:

npm init -y

This will create a package.json file with a template structure and default values:

  • description: кратко описание на проекта, модула
  • main: стартовия файл на проекта
  • scripts: обект от скриптове/предефинирани команди (например за стартиране на файлове), които се ползват в проекта
  • keywords: ключови думи, които описват пакета. Те са полезни когато търсим пакета в интернет или регистрите на npm
  • dependancies: описват се всички пакети, необходими за проекта да работи
  • dev-dependancies: описват се пакетите, които помагат (на програмистите при писане на самия пакет
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

What is a NPM project?

A

NPM е такъв, в който имаме package.json файл, в който се описват пакетите ползвани с проекта.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

How to determine the version of an installed package?

A

Execute the following command in bash terminal:

       - node -v 
       - npm -v
       - package name -v
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

How can install a npm package?

A

Execute the following command in the bash terminal within the npm project’s folder:

- npm install [name_of_package] -D - D means saving the dependency in the dev0dependancies array in the package.json file.

This will install the package in the current npm project.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Do I need to have node_modules when I use npm project?

A

No, you need to havejust a package.json file. Той съдържа цялата информация за всички пакети, които се ползват в пакета. Затова не е необходимо да качваме/изпращаме тази папка с проекта.

Като си копираме/сваляме проекта е необходимо само да изпълним:

npm install

Така всички dependencies from pachage.json ще бъдат инсталирани в node_modules папката.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

How can install a npm packege globally?

A

Open the cmd/bash terminal anywhere in the system.
Execute the following command:

  • npm install [package_name] -g
  • g comes from global

Example:
npm install lodash -g

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

How can setup and run a custom script in npm?

A

In package.json > scripts type the custom command:

“scripts” {
“start”: “node main.js”
},

Има предефинирани скриптове/команди за start and end. Ако използваме тези предефинирани команди/думи - не е необходимо да използваме думата run при пускане на скрипта.

Ако обаче ползваме различни думи, трябва да ползваме run:

"scripts" {
 "log": "node log.js" },

npm run log

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

What are ES Modules? Explain what ES Modules are and what problems they solve.

A

Когато NPM и Node.js са били създадени JavaScript не е имала собствена модулна система. Браузърите са работели по различен начин, а Node.js е работел с CommonJS модулна система.

ES6 предоставя като обща модулна система ES Modules. Браузърите започват да предоставят поддръжка за нея, също и Node.js от версия 14.

ЕS Modules става универсална модулна система за JavaScript ecosystem.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

What is a npm module?

A

Модул - това е JS файл, който декларира и експортва една или повече стойности - функции или променливи, използвайки ‘export’.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

What is important to know about the node modules?

A
  1. Те се инициализират веднъж и след това Node.js и браузъра ги кешират
  2. Ако експорта е референтен тип, то реално импортваме референцията към референтната стойност/обект
  3. Скоупа на декларираните в даден модул променливи и функции е самия модул. Модулите ни позволяват скриване на данни, т.е скриваме данни, които не сме експортнали
  4. Модулите могат да импортват други модули, които да използват в кода си
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

How can I use the ES Modules system?

A

You need to type in the package.json file the following (no matter where in the file on the first level):

“types”: “modules”,

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

How can I create an npm module?

A

Можем да експортваме стойности от файла ни една по една с думата “export”:

export const defaultMsg = ‘Default message’

export function log(msg) {
console.log(msg);
}

Това ще генерира обект с имената на всички експортнати променливи и функции.

export {
defaultMsg,
log,
}

17
Q

How can I import an npm module?

A
  • За да импортна само определени функционалности/пропертита он модула, мога да ползвам module/object destructuring:
               import { defaultMsg, log } from 'logger.js'
  • Ако искам да импортна цялата функционалност от модула и да го именувам:
               import * as logger from './logger.js'

Сега всяка функционалност от Logger.js може да бъде достъпена през logger.

  • Импортването на модул само по име - ще импортне само default export:
                   import log from 'path_to_module.js'

През log можем да достъпим всичко от default export.

18
Q

What is a default export?

A

Един модул може да има 0 или 1 default export и/ или много именувани exports.

export default function (msg) {
console.log(msg);
}

export function named () {
console.log(‘named’)
}

А може направим default export на обект от фунционалности:

export default {
   defaultMsg,
   log,
   named
}

Импортването на модул само по име - ще импортне само default export:

import log from ‘path_to_module.js’

През log можем да достъпим всичко от default export.

19
Q

What is a “tree shaking”?

A

Tree shaking - това означава да използваме само тези функционалности от модула, които ни трябват.
Да импортнем и кешираме само кода, необходим за нас. Това е и основното предимство на ES Modules пред CommonJS.