La differenza principale tra require
e import
, è che require
scansionerà automaticamente node_modules
per trovare i moduli, ma import
, che proviene da ES6, no.
Molte persone usano babel per compilare import
e export
, il che fa import
agire allo stesso modo di require
.
La versione futura di Node.js potrebbe supportare import
se stessa (in realtà, la versione sperimentale già lo fa ) e, a giudicare dalle note di Node.js, import
non supporterà node_modules
, si basa su ES6 e deve specificare il percorso del modulo.
Quindi suggerirei di non usarlo import
con Babel, ma questa funzione non è ancora confermata, potrebbe essere supportata node_modules
in futuro, chi lo saprebbe?
Per riferimento, di seguito è riportato un esempio di come Babel può convertire la import
sintassi di ES6 in sintassi di CommonJS require
.
Supponiamo che il file app_es6.js
contenga questa importazione:
import format from 'date-fns/format';
Questa è una direttiva per importare la funzione di formato dal pacchetto del nodo date-fns .
Il package.json
file correlato potrebbe contenere qualcosa del genere:
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
Il .babelrc
file correlato potrebbe essere qualcosa del genere:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
Questo build-server-file
script definito nel package.json
file è una direttiva per babel per analizzare il app_es6.js
file e generare il file app.js
.
Dopo aver eseguito lo build-server-file
script, se apri app.js
e cerchi l' date-fns
importazione, vedrai che è stato convertito in questo:
var _format = require("date-fns/format");
var _format2 = _interopRequireDefault(_format);
La maggior parte di quel file è gobbledygook per la maggior parte degli umani, tuttavia i computer lo comprendono.
Anche come riferimento, come esempio di come un modulo può essere creato e importato nel tuo progetto, se installi date-fns
e poi apri node_modules/date-fns/get_year/index.js
puoi vedere che contiene:
var parse = require('../parse/index.js')
function getYear (dirtyDate) {
var date = parse(dirtyDate)
var year = date.getFullYear()
return year
}
module.exports = getYear
Utilizzando il processo babel sopra, il tuo app_es6.js
file potrebbe quindi contenere:
import getYear from 'date-fns/get_year';
// Which year is 2 July 2014?
var result = getYear(new Date(2014, 6, 2))
//=> 2014
E Babel convertirà le importazioni in:
var _get_year = require("date-fns/get_year");
var _get_year2 = _interopRequireDefault(_get_year);
E gestire tutti i riferimenti alla funzione di conseguenza.
express
sarà di tipoany
. È possibile includere le definizioni da qui npmjs.com/package/@types/express