Główna różnica między requirei import, polega na tym, że requireautomatycznie skanuje w node_modulescelu znalezienia modułów, ale importwersja pochodząca z ES6 nie.
Większość ludzi używa babel do kompilacji importi export, co sprawia, że importdziała tak samo jak require.
Przyszła wersja Node.js może obsługiwać się importsama (w rzeczywistości wersja eksperymentalna już to robi ) i sądząc po uwagach Node.js, importnie będzie obsługiwać node_modules, opiera się na ES6 i musi określać ścieżkę modułu.
Więc sugerowałbym nie używać importz babel, ale ta funkcja nie jest jeszcze potwierdzona, może obsługiwać node_modulesw przyszłości, kto by wiedział?
Dla odniesienia, poniżej znajduje się przykład, jak babel może konwertować importskładnię ES6 na składnię CommonJS require.
Powiedzmy, że plik app_es6.jszawiera ten import:
import format from 'date-fns/format';
Jest to dyrektywa służąca do importowania funkcji formatu z pakietu węzła date-fns .
Powiązany package.jsonplik może zawierać coś takiego:
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
Powiązany .babelrcplik może wyglądać mniej więcej tak:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
Ten build-server-fileskrypt zdefiniowany w package.jsonpliku jest dyrektywą dla babel do parsowania app_es6.jspliku i wyprowadzania pliku app.js.
Po uruchomieniu build-server-fileskryptu, jeśli otworzysz app.jsi poszukasz date-fnsimportu, zobaczysz, że został on przekształcony w ten sposób:
var _format = require("date-fns/format");
var _format2 = _interopRequireDefault(_format);
Większość tego pliku jest gobbledygook dla większości ludzi, jednak komputery to rozumieją.
Również w celach informacyjnych, jako przykład tego, jak moduł można utworzyć i zaimportować do projektu, jeśli zainstalujesz, date-fnsa następnie otworzysz node_modules/date-fns/get_year/index.js, możesz zobaczyć, że zawiera:
var parse = require('../parse/index.js')
function getYear (dirtyDate) {
var date = parse(dirtyDate)
var year = date.getFullYear()
return year
}
module.exports = getYear
Korzystając z powyższego procesu babel, twój app_es6.jsplik może zawierać:
import getYear from 'date-fns/get_year';
// Which year is 2 July 2014?
var result = getYear(new Date(2014, 6, 2))
//=> 2014
Babel konwertuje import na:
var _get_year = require("date-fns/get_year");
var _get_year2 = _interopRequireDefault(_get_year);
I odpowiednio obsłuż wszystkie odwołania do funkcji.
expressbędzie typuany. Możesz dołączyć definicje stąd npmjs.com/package/@types/express