Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

274
Views
¿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 answers
Answer question

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 el 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, puede usar paquetes que solo usan Buffer , para eso tendrá 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 Report

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 (utilizado 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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!