Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

591
Vistas
¿Cómo usar el módulo npm en DENO?

Deno es genial. Lo vi en la mañana y quiero migrar a deno ahora. Estaba tratando de mover mi script nodejs existente a deno. ¿Alguien puede ayudarme sobre cómo usar los módulos npm en deno. Necesito módulo esprima. Este tiene el paquete https://github.com/denoland/deno_third_party/tree/master/node_modules pero no puedo averiguar cómo usarlo.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

A partir de la versión 1.15, Deno proporciona un modo de compatibilidad con Node que permite ejecutar un subconjunto de programas creados para Node.js directamente en Deno. El modo de compatibilidad se puede activar pasando el indicador --compat en CLI.

 deno run --compat --unstable --allow-read test.js

Actualmente, no todos los módulos integrados de node.js son compatibles y muchos son parcialmente compatibles.

Los siguientes módulos aún no están implementados:

  • clúster, dgram, http2, https, repl, tls, máquina virtual, lib
over 4 years ago · Santiago Trujillo Denunciar

0

Deno proporciona una biblioteca de compatibilidad de nodos , que permitirá usar algunos paquetes de NPM que no usan API de Node.js sin polirrelleno . Podrá require el paquete utilizando https://deno.land/std/node/module.ts

Lo siguiente funciona en deno 1.0.0

 import { createRequire } from "https://deno.land/std/node/module.ts"; const require = createRequire(import.meta.url); const esprima = require("esprima"); const program = 'const answer = 42'; console.log(esprima.tokenize(program))

El código anterior usará esprima de node_modules/ .

Para ejecutarlo, necesitará --allow-read

 deno run --allow-read esprima.js

Puede restringirlo solo a node_modules

 deno run --allow-read=node_modules esprima.js

Qué salidas:

 [ { type: "Keyword", value: "const" }, { type: "Identifier", value: "answer" }, { type: "Punctuator", value: "=" }, { type: "Numeric", value: "42" } ]

Nota : muchas API utilizadas por std/ todavía son inestables , por lo que es posible que deba ejecutarlas con el indicador --unstable .


Aunque como todo ese proyecto ya está escrito en TypeScript y no usa ninguna dependencia, será muy fácil para ellos adaptarlo a Deno. Todo lo que necesitan hacer es usar la extensión .ts en sus importaciones . También puede bifurcar el proyecto y hacer los cambios.

 // import { CommentHandler } from './comment-handler'; import { CommentHandler } from './comment-handler.ts'; // ...

Una vez que lo hagan, podrás simplemente hacer:

 // Ideally they would issue a tagged release and you'll use that instead of master import esprima from 'https://raw.githubusercontent.com/jquery/esprima/master/src/esprima.ts'; const program = 'const answer = 42'; console.log(esprima.tokenize(program))

Alternativa

También puede usar https://jspm.io/ que convertirá los módulos NPM en módulos ES

Todos los módulos en npm se convierten en módulos ES que manejan la compatibilidad completa con CommonJS, incluidas las conversiones de modo estricto.

 import esprima from "https://dev.jspm.io/esprima"; const program = 'const answer = 42'; console.log(esprima.tokenize(program))

Para los paquetes que usan módulos Node.js que no son compatibles con jspm, arrojará un error:

 Uncaught Error: Node.js fs module is not supported by jspm core. Deno support here is tracking in https://github.com/jspm/jspm-core/issues/4, +1's are appreciated!

Por ahora, puedes usar paquetes que solo usan Buffer , para eso tendrás que incluir std/node .

 // import so polyfilled Buffer is exposed import "https://deno.land/std/node/module.ts"; import BJSON from 'https://dev.jspm.io/buffer-json'; const str = BJSON.stringify({ buf: Buffer.from('hello') }) console.log(str);
over 4 years ago · Santiago Trujillo Denunciar

0

Asunto

En general, hay dos problemas con los paquetes npm en Deno:

  1. No se proporciona la conformidad del módulo ES (ESM).
  • Las importaciones desnudas como import _ from "lodash" no funcionan, no hay resolución "mágica" de node_modules
  • Todos los especificadores de importación deben incluir la extensión del archivo: .ts , .js , etc.
  • El sistema de módulos CommonJS no se puede usar en Deno
  1. El paquete npm utiliza componentes nativos de Node.js como fs o path .

Soluciones al problema 1

1.1: Módulos de terceros

La sección Módulos de terceros es la forma más rápida de descubrir paquetes compatibles.

1.2: proveedores de ESM CDN

También eche un vistazo a los proveedores de CDN , que pueden convertir automáticamente paquetes npm a módulos ES (ESM):

  • Skypack CDN
  • jspm.io
  • unpkg.com con el parámetro de consulta ?module

Skypack CDN puede entregar paquetes convertidos automáticamente que, por ejemplo, han establecido un punto de entrada de "módulo" en package.json . Para usuarios de TypeScript: obtiene definiciones de tipo .d.ts junto con archivos .js (a través de encabezados HTTP X-TypeScript-Types utilizados por Deno).

unpkg.com describe su marca ?module de la siguiente manera: "Expande todos los especificadores de importación 'básicos' en los módulos de JavaScript para desempaquetar las URL. Esta función es muy experimental".

Esprima no depende de los componentes internos de Node.js, por lo que podemos simplificar su importación mediante una URL de CDN:
 import esprima from "https://cdn.skypack.dev/esprima@^4.0.1"; // Option 1: Skypack import esprima from "https://dev.jspm.io/esprima"; // Option 2: jspm // your program const tokens = esprima.tokenize("const foo = 'bar'"); // works

jspm sería una buena opción aquí: los tipos Skypack TS no funcionaron para mí en este caso particular.

1.3: Otros enfoques

También puede intentar importar una versión compatible con ESM directamente desde las fuentes del repositorio (por ejemplo, una rama de ESM). Aunque para Esprima no funcionará debido a la falta de extensiones de archivo en el código.

Snowpack y jspm reemplazan un enfoque más manual para convertir CommonJS → ESM. El complemento acumulativo @rollup/plugin-commonjs (usado internamente por Snowpack) es incluso una herramienta de nivel más bajo.


Solución al problema 2

Deno proporciona una capa de compatibilidad de nodos, consulte la respuesta de Marcos Casagrande . Sin embargo, no todas las funciones integradas nativas de Node.js son totalmente compatibles.

Como Esprima no depende de las funciones integradas de Node, puede optar por la opción CDN más simple.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda