namespace example and node.js typescript import require

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.



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'')} }

Ref. 1 - Nodejs Doc

Ref 2 - problema de github


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

import: una actualización de los módulos ES6 en Node.js


la importación se usa en mecanografiado (angular). require se usa en ES6 (ExpressJs)