Importing NPM Packages in Deno Throws 'Uncaught SyntaxError' for Specific Modules
Hi there, I'm relatively new to Deno. I'm running into an error with an NPM package import.
The code works fine with NodeJS. I've tried using Deno run with the
--unstable
flag but got the same error message. I've also tried other packages (express for example) which worked just fine. Am I doing something wrong here? Do I need to configure something to get the package to work with Deno?2 Replies
It seems like you're encountering an issue with importing a specific NPM package in Deno. According to the documentation, Deno has native support for importing npm packages using
npm:
specifiers since version 1.28. However, there are a few things to consider when importing npm packages in Deno:
1. Module Resolution: Deno only supports the modern node16
module resolution. If a default export from an npm:
import appears to have a wrong type, it might be because the package provides wrong types under node16
module resolution for imports from ESM. You can verify this by checking if the error also occurs with tsc --module node16
and "type": "module"
in package.json
or by consulting the "Are the types wrong?" website, particularly the "node16 from ESM" row.
2. TypeScript Types: Some npm packages ship with types out of the box, and you can import those and use them with types easily. However, some packages do not, and you might need to specify their types with a @deno-types
directive, especially if you're using a @types
package.
3. Unstable Features: Some features related to Node.js compatibility and npm package imports might still be unstable. You mentioned that you've tried using the --unstable
flag, which is correct for using unstable features, but the issue might be with the package itself or how it exports its modules.
Given the error message you're seeing, it's possible that the @atproto/api
package might not be exporting BskyAgent
in a way that's compatible with Deno's import mechanism, or it might be an issue with the package's type definitions when resolved under Deno's node16
module resolution.
Here are a few steps you can take to troubleshoot the issue:
- Check the Package's Exports: Look into the @atproto/api
package's source code or documentation to verify that
BskyAgent
is indeed an exported member of the package.
- Try Importing the Default Export: If the package uses a default export, you might need to import it without destructuring:
- Check for Type Definitions: If the package has a @types
package available, you might need to include that in your import statement using the @deno-types
directive.
If after these steps the issue persists, it might be a compatibility issue with the package itself. In such cases, you can report the problem to the Deno issue tracker, as the Deno team is actively working on improving compatibility with npm packages. 🦕