node.js - example - typescript require
La diferencia entre "require(x)" e import x (5)
La principal diferencia entre
require
e
import
, es que
require
escaneará automáticamente
node_modules
para encontrar módulos, pero
import
, que viene de ES6, no lo hará.
La mayoría de las personas usan
babel
para compilar
import
y
export
, lo que hace que la
import
actúe de la misma manera que se
require
.
La versión futura de Node.js podría admitir la
import
sí misma (en realidad,
la versión experimental ya lo hace
), y a juzgar por las notas de Node.js, la
import
no admitirá
node_modules
, se basa en ES6 y debe especificar la ruta del módulo .
Por lo tanto, le sugiero que no use la
import
con babel, pero esta característica aún no está confirmada, podría admitir
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 sintaxis de
import
de ES6 a la sintaxis de CommonJS.
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 format del paquete de nodos date-fns .
El archivo
package.json
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 archivo
.babelrc
relacionado podría ser algo como esto:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
Este script de
build-server-file
definido en el archivo
package.json
es una directiva para que babel
app_es6.js
archivo
app_es6.js
y
app_es6.js
archivo
app_es6.js
Después de ejecutar el script
build-server-file
, si abre
app.js
y busca la importación de
date-fns
, 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 archivo
app_es6.js
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.
Acabo de comenzar a trabajar en un proyecto de nodo pequeño que interactuará con un MongoDB.
Sin embargo, parece que no puedo lograr que los módulos de nodo relevantes se importen correctamente, aunque los instalé correctamente a través de
npm
.
Por ejemplo, el siguiente código arroja y error, diciéndome que "express no tiene exportación predeterminada":
import express from "express";
Sin embargo, este código funciona:
const express = require("express");
Entonces mi pregunta es, ¿cuál es la diferencia en cómo funcionan los métodos de importación y variable / requerimiento? Me gustaría arreglar lo que sea que esté plagando mis importaciones en el proyecto, ya que parece causar problemas adicionales en el futuro.
La respuesta que me ayuda a comprender la diferencia entre
require
e
import
es
Using Node.js require vs. ES6 import / export
, que incluye un diagrama simple:
No es una respuesta aquí y más como un comentario, lo siento pero no puedo comentar.
En el nodo V10, puede usar el indicador
--experimental-modules
para indicarle a Nodejs que desea usar
import
.
Pero su script de entrada debe terminar con
.mjs
.
Tenga en cuenta que esto sigue siendo algo experimental y no debe usarse en la producción.
// main.mjs
import utils from ''./utils.js''
utils.print();
// utils.js
module.exports={
print:function(){console.log(''print called'')}
}
Permítanme dar un ejemplo para incluir el módulo express con require & import
-exigir
var express = require(''express'');
-importar
import * as express from ''express'';
Entonces, después de usar cualquiera de las afirmaciones anteriores, tendremos una variable llamada ''express'' con nosotros. Ahora podemos definir la variable ''aplicación'' como,
var app = express();
Entonces usamos ''require'' con ''CommonJS'' e ''import'' con ''ES6''.
Para obtener más información sobre ''requerir'' e ''importar'', lea los enlaces a continuación.
require - Requiriendo módulos en Node.js: todo lo que necesitas saber
la importación se usa en mecanografiado (angular). require se usa en ES6 (ExpressJs)