node instalar how framework docs diccionario descargar about node.js es6-modules

node.js - instalar - ¿Cómo puedo usar una importación es6 en el nodo?



node js es un framework (11)

Esta pregunta ya tiene una respuesta aquí:

Estoy tratando de acostumbrarme a las importaciones de es6 en el nodo y estoy tratando de usar la sintaxis proporcionada en este ejemplo:

Enlace de Cheatsheet: https://hackernoon.com/import-export-default-require-commandjs-javascript-nodejs-es6-vs-cheatsheet-different-tutorial-example-5a321738b50f

Estoy mirando la tabla de soporte: http://node.green/ , pero no pude encontrar qué versión admite las nuevas declaraciones de importación (intenté buscar la importación / solicitud de texto) Actualmente estoy ejecutando el nodo 8.1. 2 y también creo que dado que la hoja de referencia se refiere a archivos .js, debería funcionar con archivos .js.

Mientras ejecuto el código (tomado del primer ejemplo de la hoja de trucos):

import { square, diag } from ''lib'';

Me sale el error: SyntaxError: Importación de token inesperada.

Referencia a lib que estoy intentando importar:

//------ lib.js ------ export const sqrt = Math.sqrt; export function square(x) { return x * x; } export function diag(x, y) { return sqrt(square(x) + square(y)); }

¿Qué me estoy perdiendo y cómo puedo hacer que el nodo reconozca mi declaración de importación?


Node.js ha incluido soporte experimental para soporte ES6. Lea más sobre aquí: https://nodejs.org/api/esm.html .

TLDR; Guarde el archivo con módulos ES6 con extensión .mjs y ejecútelo como:

node --experimental-modules my-app.mjs

Node.js no admite módulos ES6. Este blog de James describe las razones para ello. Aunque puede usar Babel para usar la sintaxis de los módulos ES6.


El uso de la extensión .mjs (como se sugiere en la respuesta aceptada) para habilitar los módulos ECMAScript funciona, sin embargo, con Node.js v12, también puede habilitar esta característica globalmente en su package.json .

Los documentos oficiales indican :

las declaraciones de importación de .js y los archivos sin extensión se tratan como módulos ES si el paquete padre más cercano.json contiene "type": "module".

{ "type": "module", "main": "./src/index.js" }

(Por supuesto, aún debe proporcionar la bandera --experimental-modules al iniciar su aplicación).


No sé si esto funcionará para su caso, pero estoy ejecutando un servidor express con esto:

nodemon --inspect ./index.js --exec babel-node --presets es2015,stage-2

Esto me da la capacidad de importar y usar el operador de propagación aunque solo estoy usando la versión 8 del nodo.

Deberá instalar babel-cli, babel-preset-es2015, babel-preset-stage-2, haga lo que estoy haciendo.


Perdido alrededor de 3 horas.

Solo quería usar la import y export en archivos js.

Todos dicen que no es posible. Pero, a partir de mayo de 2018, es posible usar el anterior en node.js simple, sin ningún módulo como babel, etc.

Aquí hay una manera simple de hacerlo.

Cree los archivos a continuación, ejecute y vea la salida por sí mismo.

Además, no olvide ver la Explanation continuación.

myfile.mjs

npm install esm

index.mjs

node -r esm index.js

correr

{ "name": "My-app", "version": "1.0.0", "description": "Some Hack", "main": "index.js", "scripts": { "test": "echo /"Error: no test specified/" && exit 1", "start": "node -r esm index.js" }, }

salida

npm start

Explicación:

  1. Como se trata de módulos experimentales, los archivos .js se denominan archivos .mjs
  2. Mientras se ejecuta, agregará --experimental-modules al node index.mjs
  3. Mientras se ejecuta con módulos experimentales en la salida, verá: "(nodo: 12020) Advertencia experimental: el cargador de módulos ESM es experimental".
  4. Tengo la versión actual del nodo js, ​​por lo que si ejecuto node --version , me da "v10.3.0", aunque la versión LTE / estable / recomendada es 8.11.2 LTS.
  5. Algún día en el futuro, podría usar .js en lugar de .mjs, ya que las características se vuelven estables en lugar de Experimental.
  6. Más sobre características experimentales, ver: https://nodejs.org/api/esm.html

Espero que haya ayudado.


Puedes probar esm .

Aquí hay alguna introducción: esm


Si está utilizando el sistema de módulos en el lado del servidor, no necesita usar Babel en absoluto. Para usar módulos en NodeJS, asegúrese de que:

  1. Use una versión de nodo que admita el indicador --experimental-modules
  2. Sus archivos .js se deben renombrar a .mjs

Eso es.

Sin embargo, y esto es un gran problema, mientras que su brillante código ES6 puro se ejecutará en un entorno como NodeJS (al escribir 9.5.0), todavía tendrá la locura de transpilar solo para probar. También tenga en cuenta que Ecma ha declarado que los ciclos de lanzamiento de Javascript serán más rápidos, con nuevas funciones entregadas de manera más regular. Si bien esto no será un problema para entornos individuales como NodeJS, es una propuesta ligeramente diferente para entornos de navegador. Lo que está claro es que los marcos de prueba tienen mucho que ver para ponerse al día. Es probable que aún necesites transpilar para probar marcos. Sugeriría usar broma.

También tenga en cuenta los marcos de agrupación, se encontrará con problemas allí


También puede usar el paquete npm llamado esm que le permite usar módulos ES6 en el nodo. No necesita configuración. Con esm podrás usar export / import en tus archivos JS.

Ejecute el siguiente comando en su terminal

function myFunc() { console.log("Hello from myFunc") } export default myFunc;

o

import myFunc from "./myfile" // this is our myfile.mjs myFunc();

Después de eso, debe requerir este paquete al iniciar su servidor con nodo. Por ejemplo, si su servidor de nodo ejecuta el archivo index.js, usaría el comando

node --experimental-modules index.mjs

También puede agregarlo en su archivo package.json como este

(node:12020) ExperimentalWarning: The ESM module loader is experimental. Hello from myFunc

Luego ejecute este comando desde la terminal para iniciar su servidor de nodo

yarn add esm

Mira este enlace para más detalles


Usando Node v12.2.0 puedo importar todos los módulos estándar como este:

// this is to allow ES6 export syntax // to be properly read and processed by node.js application require(''babel-register'')({ presets: [ ''env'', ], }); // after that any line you add below that has typical es6 export syntax // will work just fine const utils = require(''../../utils.js''); const availableMixins = require(''../../../src/lib/mixins/index.js'');

Contra lo que hice antes:

export { default as FormValidationMixin } from ''./form-validation''; // eslint-disable-line import/prefer-default-export

Cualquier módulo que sea un módulo ECMAScript puede importarse sin tener que usar una extensión .mjs siempre que tenga este campo en su archivo package.json:

import * as Http from ''http'' import * as Fs from ''fs'' import * as Path from ''path'' import * as Readline from ''readline'' import * as Os from ''os''

Así que asegúrese de colocar dicho archivo package.json en la misma carpeta que el módulo que está creando.

Y para importar módulos no actualizados con el soporte del módulo ECMAScript puede hacer lo siguiente:

const Http = require(''http'') ,Fs = require(''fs'') ,Path = require(''path'') ,Readline = require(''readline'') ,Os = require(''os'')

Y, por supuesto, no olvide que esto es necesario para ejecutar realmente un script utilizando las importaciones de módulos:

"type": "module"

Y que la carpeta principal necesita este archivo package.json para que ese script no se queje de la sintaxis de importación:

// Implement the old require function import { createRequire } from ''module'' const require = createRequire(import.meta.url) // Now you can require whatever const WebSocket = require(''ws'') ,Mime = require(''mime-types'') ,Chokidar = require(''chokidar'')

Si el módulo que desea usar no se ha actualizado para admitir la importación utilizando la sintaxis de importación, entonces no tiene otra opción que usar require (pero con mi solución anterior eso no es un problema).


Volver a la pregunta original de sobre

"... ¿qué versión admite las nuevas declaraciones de importación ES6?"

Según el artículo del Dr. Axel Rauschmayer , existe un plan para que sea compatible de forma predeterminada (sin el indicador de línea de comando experimental) en Node.js 10.x LTS . De acuerdo con el plan de lanzamiento de node.js como está en 29/03/2018, es probable que esté disponible después de abril de 2018, mientras que LTS comenzará en octubre de 2018.


solución

https://www.npmjs.com/package/babel-register

node --experimental-modules my-script-that-use-import.js

a continuación se muestra la definición de mixins / index.js

{ "type": "module" }

eso funcionó bien dentro de mi aplicación de la CLI de node.js.


"devDependencies": { "@babel/core": "^7.2.0", "@babel/preset-env": "^7.2.0", "@babel/register": "^7.0.0" }

.babelrc

{ "presets": ["@babel/preset-env"] }

punto de entrada aplicación node.js

require("@babel/register")({}) // Import the rest of our application. module.exports = require(''./index.js'')

Enlace Cómo habilitar importaciones ES6 en Node.JS https://timonweb.com/posts/how-to-enable-es6-imports-in-nodejs/