La differenza principale tra requiree import, è che requirescansionerà automaticamente node_modulesper trovare i moduli, ma import, che proviene da ES6, no.
Molte persone usano babel per compilare importe export, il che fa importagire allo stesso modo di require.
La versione futura di Node.js potrebbe supportare importse stessa (in realtà, la versione sperimentale già lo fa ) e, a giudicare dalle note di Node.js, importnon supporterà node_modules, si basa su ES6 e deve specificare il percorso del modulo.
Quindi suggerirei di non usarlo importcon Babel, ma questa funzione non è ancora confermata, potrebbe essere supportata node_modulesin futuro, chi lo saprebbe?
Per riferimento, di seguito è riportato un esempio di come Babel può convertire la importsintassi di ES6 in sintassi di CommonJS require.
Supponiamo che il file app_es6.jscontenga 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.jsonfile 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 .babelrcfile correlato potrebbe essere qualcosa del genere:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
Questo build-server-filescript definito nel package.jsonfile è una direttiva per babel per analizzare il app_es6.jsfile e generare il file app.js.
Dopo aver eseguito lo build-server-filescript, se apri app.jse cerchi l' date-fnsimportazione, 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-fnse poi apri node_modules/date-fns/get_year/index.jspuoi 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.jsfile 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.
expresssarà di tipoany. È possibile includere le definizioni da qui npmjs.com/package/@types/express