Der Hauptunterschied zwischen require
und besteht darin import
, dass require
automatisch node_modules
nach Modulen import
gesucht wird, bei ES6 jedoch nicht.
Die meisten Leute benutzen babel zum kompilieren import
und export
, was import
das gleiche macht wie require
.
Die zukünftige Version von Node.js unterstützt import
sich möglicherweise selbst (tatsächlich tut dies die experimentelle Version bereits ), und nach den Notizen von Node.js import
wird dies nicht unterstützt node_modules
, sie basiert auf ES6 und muss den Pfad des Moduls angeben.
Ich würde also vorschlagen, dass Sie nicht import
mit babel verwenden, aber diese Funktion ist noch nicht bestätigt. Sie wird möglicherweise node_modules
in Zukunft unterstützt. Wer würde das wissen?
Im Folgenden finden Sie ein Beispiel dafür, wie babel die ES6- import
Syntax in die CommonJS- require
Syntax konvertieren kann .
Angenommen, die Datei app_es6.js
enthält diesen Import:
import format from 'date-fns/format';
Dies ist eine Anweisung zum Importieren der Formatierungsfunktion aus dem Knotenpaket date-fns .
Die zugehörige package.json
Datei könnte Folgendes enthalten:
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
Die zugehörige .babelrc
Datei könnte ungefähr so aussehen:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
Dieses build-server-file
in der package.json
Datei definierte Skript ist eine Anweisung für babel, die app_es6.js
Datei zu analysieren und die Datei auszugeben app.js
.
build-server-file
Wenn Sie nach dem Ausführen des Skripts app.js
den date-fns
Import öffnen und suchen , sehen Sie, dass er in diesen konvertiert wurde:
var _format = require("date-fns/format");
var _format2 = _interopRequireDefault(_format);
Der größte Teil dieser Datei ist für die meisten Menschen ein Gobbledy-Buch, aber Computer verstehen es.
Als Referenz dafür, wie ein Modul erstellt und in Ihr Projekt importiert werden kann, können Sie beim Installieren date-fns
und anschließenden Öffnen node_modules/date-fns/get_year/index.js
Folgendes sehen:
var parse = require('../parse/index.js')
function getYear (dirtyDate) {
var date = parse(dirtyDate)
var year = date.getFullYear()
return year
}
module.exports = getYear
Mit dem oben beschriebenen Babel-Prozess app_es6.js
könnte Ihre Datei dann Folgendes enthalten:
import getYear from 'date-fns/get_year';
// Which year is 2 July 2014?
var result = getYear(new Date(2014, 6, 2))
//=> 2014
Und babel würde die Importe umwandeln in:
var _get_year = require("date-fns/get_year");
var _get_year2 = _interopRequireDefault(_get_year);
Und behandeln Sie alle Verweise auf die Funktion entsprechend.
express
ist jedoch vom Typany
. Sie könnten die Definitionen von hier einfügen npmjs.com/package/@types/express