Основна відмінність між requireі import, полягає в тому require, що автоматично сканується, node_modulesщоб знайти модулі, але import, що надходить від ES6, не буде.
Більшість людей використовують дівочих підборців для компіляції importта export, що змушує importдіяти так само, як require.
Майбутня версія Node.js може підтримувати importсебе (насправді експериментальна версія вже є ), і, судячи з приміток Node.js, importне підтримуватиме node_modules, вона базується на ES6, і повинна вказати шлях модуля.
Тож я б запропонував вам не користуватися importбабером, але ця функція ще не підтверджена, вона може підтримувати node_modulesнадалі, хто б це знав?
Для довідки, нижче наведено приклад того, як babel може перетворити importсинтаксис ES6 в синтаксис CommonJS require.
Скажіть, що файл app_es6.jsмістить цей імпорт:
import format from 'date-fns/format';
Це директива щодо імпорту функції формату з пакету вузлів date-fns .
Пов'язаний package.jsonфайл може містити щось подібне:
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
Пов'язаний .babelrcфайл може бути приблизно таким:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
Цей build-server-fileскрипт, визначений у package.jsonфайлі, є директивою для babel для розбору app_es6.jsта виведення файлу app.js.
Після запуску build-server-fileсценарію, якщо ви відкриєте app.jsта шукаєте date-fnsімпорт, ви побачите, що він перетворений у такий:
var _format = require("date-fns/format");
var _format2 = _interopRequireDefault(_format);
Більшість цього файлу для більшості людей є гоблем, але комп'ютери це розуміють.
Також для довідки, як приклад того, як модуль можна створити та імпортувати у ваш проект, якщо ви встановите date-fnsта відкриєте, node_modules/date-fns/get_year/index.jsви можете побачити, що він містить:
var parse = require('../parse/index.js')
function getYear (dirtyDate) {
var date = parse(dirtyDate)
var year = date.getFullYear()
return year
}
module.exports = getYear
Використовуючи процес babel вище, ваш app_es6.jsфайл може містити:
import getYear from 'date-fns/get_year';
// Which year is 2 July 2014?
var result = getYear(new Date(2014, 6, 2))
//=> 2014
І вавило перетворить імпорт на:
var _get_year = require("date-fns/get_year");
var _get_year2 = _interopRequireDefault(_get_year);
І відповідно обробляти всі посилання на функцію.
expressбуде мати типany. Ви можете включити визначення звідси npmjs.com/package/@types/express