====== How to use an ES6 import in Node.js? ======
**Введение в модульность ES6: **
The import statement is used to **import** modules that are exported by some other module. A module is a file that contains a piece of reusable code. The import modules are in strict mode whether it is declared or not.
Инструкция import используется для **импорта** модулей, которые экспортируются каким-либо другим модулем. Модуль - это файл, содержащий фрагмент повторно используемого кода. Модули находятся в "строгом режиме", независимо от того, объявлен он или нет.
**Синтаксис import:**
import name from 'module-name'
**Импорт может быть выполнен различными способами:**
- Импорт всего модуля:
import * as name from 'module-name'
- Импорт экспорт по умолчанию из модуля:
import name from 'module-name'
- Импорт одного экспорта из модуля:
import { name } from 'module-name'
- Импорт нескольких экспортов из модуля:
import { nameOne , nameTwo } from 'module-name'
- Импорт модуля только для побочных эффектов
import './module-name'
Nodejs не поддерживает прямой импорт ES6. Если мы попытаемся использовать import для импорта модулей непосредственно в nodejs, это выдаст ошибку. Например, если мы попытаемся импортировать модуль express, написав **import express from ‘express’** node js выдаст ошибку следующего вида:
{{ :nodejs:options:screenshot207.png |}}
- модуль имеет экспериментальную поддержку модулей ES. Чтобы включить их, нам нужно внести некоторые изменения в файл package.json. Прежде чем следовать инструкциям, убедитесь, что узел установлен. Ниже приведены шаги для достижения того же самого.
//package.json
{
"name": "index",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
- Создайте файл index.js и напишите программу, используя импорт ES6. Например, давайте попробуем импортировать express в index.js файл
//index.js
import express from 'express';
const app = express();
app.get('/',(req,res) => {
res.send('GeeksforGeeks');
})
const PORT = 5000;
app.listen(PORT,() => {
console.log(`Running on PORT ${PORT}`);
})
- Теперь запустите index.js файл, набрав **узел --экспериментальные модули index.js ** в терминале.
{{ :nodejs:options:screenshot185.png |}}
**Использование модуля esm:**
Другой способ сделать это - создать файл с расширением **.mjs**. Если мы используем файл с расширением .mjs, то нам не нужно добавлять ** “type”: “module”** в файл package.json. Мы можем напрямую написать программу и выполнить ее, набрав **node --experimental-modules index.mjs** в терминале. Теперь, при использовании файла с расширением .mjs, файл package.json будет выглядеть следующим образом:
// package.json when using .mjs file
{
"name": "index",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Создайте файл index.mjs и напишите программу, используя импорт ES6.
//index.mjs
import express from 'express';
const app = express();
app.get('/',(req,res) => {
res.send('GeeksforGeeks');
})
const PORT = 5000;
app.listen(PORT,() => {
console.log(`Running on PORT ${PORT}`);
})
Теперь в терминале введите **node --experimental-modules index.mjs** . Это приведет к запуску файла, и приложение теперь будет запущено на порту 5000. **Использование модуля esm** Установка
npm install esm
Now try executing the program written in the index.js file earlier by typing **node -r esm index.js** in the terminal.
{{ :nodejs:options:screenshot188.png |}}
Другой способ использовать модуль **esm** - создать другой файл, скажем server.js который загружает esm перед фактическим применением. В самом server.js файл напишите приведенный ниже код
//server.js
require = require("esm")(module);
module.exports = require("./index.js");
В файле **server.js **, мы импортируем index.js файл, содержащий фактическую программу, которая должна быть выполнена.
Теперь в терминале введите **узел server.js ** для выполнения программы
{{ :nodejs:options:screenshot194.png |}}
Результат работы **index.js ** и **файл index.mjs** в приведенном выше методе является:
{{ :nodejs:options:screenshot196.png |}}