La principal diferencia entre require
y import
, es que require
escaneará automáticamente node_modules
para encontrar módulos, pero import
, que proviene de ES6, no lo hará.
La mayoría de las personas usan babel para compilar import
y export
, lo que hace que import
actúen igual que require
.
La versión futura de Node.js podría ser compatible import
(en realidad, la versión experimental ya lo es ), y a juzgar por las notas de Node.js, import
no será compatible node_modules
, se basa en ES6 y debe especificar la ruta del módulo.
Por lo tanto, le sugiero que no lo use import
con babel, pero esta función aún no está confirmada, podría ser compatible node_modules
en el futuro, ¿quién lo sabría?
Como referencia, a continuación se muestra un ejemplo de cómo Babel puede convertir la import
sintaxis de ES6 en la sintaxis de CommonJS require
.
Digamos que el archivo app_es6.js
contiene esta importación:
import format from 'date-fns/format';
Esta es una directiva para importar la función de formato desde el paquete de nodos date-fns .
El package.json
archivo relacionado podría contener algo como esto:
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
El .babelrc
archivo relacionado podría ser algo como esto:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
Este build-server-file
script definido en el package.json
archivo es una directiva para que babel analice el app_es6.js
archivo y lo muestre app.js
.
Después de ejecutar el build-server-file
script, si abre app.js
y busca la date-fns
importación, verá que se ha convertido en esto:
var _format = require("date-fns/format");
var _format2 = _interopRequireDefault(_format);
La mayor parte de ese archivo es engullido por la mayoría de los humanos, sin embargo, las computadoras lo entienden.
También como referencia, como un ejemplo de cómo se puede crear e importar un módulo en su proyecto, si instala date-fns
y luego abre node_modules/date-fns/get_year/index.js
, puede ver que contiene:
var parse = require('../parse/index.js')
function getYear (dirtyDate) {
var date = parse(dirtyDate)
var year = date.getFullYear()
return year
}
module.exports = getYear
Usando el proceso de babel anterior, su app_es6.js
archivo podría contener:
import getYear from 'date-fns/get_year';
// Which year is 2 July 2014?
var result = getYear(new Date(2014, 6, 2))
//=> 2014
Y Babel convertiría las importaciones a:
var _get_year = require("date-fns/get_year");
var _get_year2 = _interopRequireDefault(_get_year);
Y maneje todas las referencias a la función en consecuencia.
express
será de tipoany
. Puede incluir las definiciones desde aquí npmjs.com/package/@types/express