La principale différence entre requireet import, est que requirele scanne automatiquement node_modulespour trouver des modules, mais import, qui vient d'ES6, ne le fera pas.
La plupart des gens utilisent babel pour compiler importet export, ce qui fait importagir de la même manière que require.
La future version de Node.js pourrait prendre importen charge elle-même (en fait, la version expérimentale le fait déjà ), et à en juger par les notes de Node.js, importne prend pas en charge node_modules, elle est basée sur ES6 et doit spécifier le chemin du module.
Je vous suggère donc de ne pas l'utiliser importavec babel, mais cette fonctionnalité n'est pas encore confirmée, elle pourrait prendre node_modulesen charge dans le futur, qui le saurait?
Pour référence, vous trouverez ci-dessous un exemple de la façon dont babel peut convertir la importsyntaxe d' ES6 en syntaxe de CommonJS require.
Disons que le fichier app_es6.jscontient cette importation:
import format from 'date-fns/format';
Il s'agit d'une directive pour importer la fonction de format à partir du package de nœuds date-fns .
Le package.jsonfichier associé pourrait contenir quelque chose comme ceci:
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
Le .babelrcfichier associé pourrait être quelque chose comme ceci:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
Ce build-server-filescript défini dans le package.jsonfichier est une directive permettant à babel d'analyser le app_es6.jsfichier et de sortir le fichier app.js.
Après avoir exécuté le build-server-filescript, si vous ouvrez app.jset recherchez l' date-fnsimportation, vous verrez qu'elle a été convertie en ceci:
var _format = require("date-fns/format");
var _format2 = _interopRequireDefault(_format);
La plupart de ce fichier est englouti par la plupart des humains, mais les ordinateurs le comprennent.
Aussi pour référence, comme exemple de la façon dont un module peut être créé et importé dans votre projet, si vous installez date-fnspuis ouvrez, node_modules/date-fns/get_year/index.jsvous pouvez voir qu'il contient:
var parse = require('../parse/index.js')
function getYear (dirtyDate) {
var date = parse(dirtyDate)
var year = date.getFullYear()
return year
}
module.exports = getYear
En utilisant le processus babel ci-dessus, votre app_es6.jsfichier pourrait alors contenir:
import getYear from 'date-fns/get_year';
// Which year is 2 July 2014?
var result = getYear(new Date(2014, 6, 2))
//=> 2014
Et babel convertirait les importations en:
var _get_year = require("date-fns/get_year");
var _get_year2 = _interopRequireDefault(_get_year);
Et gérez toutes les références à la fonction en conséquence.
expresssera de typeany. Vous pouvez inclure les définitions d'ici npmjs.com/package/@types/express