La principal diferencia entre requirey import, es que requireescaneará automáticamente node_modulespara encontrar módulos, pero import, que proviene de ES6, no lo hará.
La mayoría de las personas usan babel para compilar importy export, lo que hace que importactú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, importno 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 importcon babel, pero esta función aún no está confirmada, podría ser compatible node_modulesen el futuro, ¿quién lo sabría?
Como referencia, a continuación se muestra un ejemplo de cómo Babel puede convertir la importsintaxis de ES6 en la sintaxis de CommonJS require.
Digamos que el archivo app_es6.jscontiene 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.jsonarchivo 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 .babelrcarchivo relacionado podría ser algo como esto:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
Este build-server-filescript definido en el package.jsonarchivo es una directiva para que babel analice el app_es6.jsarchivo y lo muestre app.js.
Después de ejecutar el build-server-filescript, si abre app.jsy busca la date-fnsimportació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-fnsy 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.jsarchivo 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.
expressserá de tipoany. Puede incluir las definiciones desde aquí npmjs.com/package/@types/express