Registry / serialization / acorn-node

acorn-node

JSON →
library2.0.1jsnpmunverified

acorn-node is a JavaScript parser library that bundles the core Acorn parser with a set of preloaded plugins, providing syntax parity with recent Node.js versions. This includes support for features like BigInt, numeric separators, public and private class fields (instance and static), dynamic `import()`, `import.meta`, and `export * as ns from`. The package sets default options like `ecmaVersion: 2019`, `allowHashBang: true`, and `allowReturnOutsideFunction: true` to align with Node.js module semantics. The current stable version is 2.0.1. Releases appear to follow Acorn's updates and Node.js syntax advancements, with minor patch releases addressing specific parsing issues. Its key differentiator is providing a ready-to-use Acorn instance capable of parsing modern Node.js JavaScript without requiring manual plugin configuration, including compatibility for older Node.js versions via Bublé-compiled plugins.

npm install acorn-node
INSTALL
IMPORT
SIG · ACORN-NODE
A
acorn-node
serializationjavascriptv2.0.1
Install
Import
Disk
Pass rate
0/ 6
Env Coverage0 / 6
glibc
1822
musl
1822
Install & Compatibility
Where this runs
tested against v? · npm install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
node 18226 runs
build_error
glibc
node 18226 runs
build_error
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

acorn
import * as acorn from 'acorn-node'
const acorn = require('acorn')
The primary export is the configured Acorn parser. While CommonJS `require('acorn-node')` is also common, using `import * as acorn from 'acorn-node'` is standard for ESM contexts.
walk
import { simple as walkSimple } from 'acorn-node/walk'
const { walk } = require('acorn-node')
The AST walker is available from a sub-path. It exposes various walking methods (e.g., `simple`, `full`, `ancestor`) rather than a single `walk` function.
NodeTypes
import { Node } from 'acorn-node'
import { Import } from 'acorn-node'
Node types are implicitly part of the AST. Specifically, dynamic import nodes changed from `Import` to `ImportExpression` in v2.0.0, aligning with Acorn's standard AST.

This example demonstrates parsing a JavaScript code snippet using acorn-node, including modern features like private class fields, static class fields, numeric separators, BigInts, dynamic `import()`, and `export * as ns from`. It then uses the bundled `walk` utility to traverse the AST and identify specific node types.

import * as acorn from 'acorn-node'; import { simple as walkSimple } from 'acorn-node/walk'; const code = ` class MyClass { #privateField = 1; static publicStaticField = 2; constructor() { console.log(this.#privateField); } } const bigNum = 1_000_000_000_000_000n; const dynamicImport = import('./module.js'); export * as ns from './ns.mjs'; `; try { const ast = acorn.parse(code, { sourceType: 'module' }); console.log('AST parsed successfully. Root node type:', ast.type); let foundClassFields = 0; walkSimple(ast, { PropertyDefinition(node) { if (node.key.type === 'PrivateIdentifier' || node.static) { foundClassFields++; } }, ImportExpression(node) { console.log('Found dynamic import:', node.source.value); } }); console.log(`Found ${foundClassFields} class field definitions.`); } catch (e) { console.error('Parsing error:', e.message); }
Debug
Known issues
breakingThe node type for dynamic `import()` expressions changed from `Import` to `ImportExpression`. This aligns with the standard Acorn/ESTree AST specification.
fix
Update AST traversal logic to check for `ImportExpression` nodes instead of `Import` nodes when handling dynamic imports.
affects: >=2.0.0
gotchaWhen `acorn-node` upgraded to Acorn v7 (in `acorn-node` v1.8.0), it initially maintained the `Import` node type for dynamic imports for backwards compatibility, deviating from Acorn v7's `ImportExpression`. This could lead to confusion if integrating with other tools expecting standard Acorn v7 ASTs.
fix
Be aware of the `Import` vs `ImportExpression` distinction in this version range. If migrating to v2.0.0 or higher, adjust code to expect `ImportExpression`.
affects: >=1.8.0 <2.0.0
gotchaPrior to v2.0.0, `acorn-node` rejected escape sequences in `import.meta` which could lead to unexpected parsing errors for certain `import.meta` usages.
fix
Upgrade to v2.0.0 or higher to correctly handle escape sequences in `import.meta`. If unable to upgrade, avoid using escape sequences in `import.meta` properties.
affects: <2.0.0
breakingA regression in `import.meta` parsing was introduced and subsequently reverted. This could cause crashes or incorrect parsing of `import.meta` properties.
fix
Avoid `acorn-node` version 1.8.1. Upgrade to 1.8.2 or later, or downgrade to 1.8.0.
affects: 1.8.1
Errors
Common errors & fixes
SyntaxError: Unexpected token (XX:YY)
Attempting to parse modern JavaScript syntax (e.g., class fields, BigInt) with a plain `acorn` instance or an outdated `acorn-node` version.
fix
Ensure you are using `acorn-node` (current version 2.0.1 or higher) and not `acorn` directly, as `acorn-node` preloads the necessary plugins. Also, verify `sourceType` is correctly set in parsing options (e.g., `'module'` for ES modules).
TypeError: Cannot read properties of undefined (reading 'type') or similar errors when traversing AST for dynamic imports.
Code expecting `Import` nodes for dynamic imports when using `acorn-node` v2.0.0 or later, which switched to `ImportExpression`.
fix
Update your AST traversal logic to look for `ImportExpression` nodes instead of `Import` nodes. Example: `if (node.type === 'ImportExpression') { ... }`.
ReferenceError: require is not defined or SyntaxError: Cannot use import statement outside a module
Mixing CommonJS `require()` and ESM `import` statements or running code in an environment that doesn't support the chosen module system.
fix
For Node.js environments, ensure consistency: either use `require()` exclusively (and save files as `.js` if `type: module` isn't in `package.json`) or use `import` exclusively (and save files as `.mjs` or ensure `type: module` in `package.json`). For browser environments, use bundlers or ensure script tags have `type='module'` for ESM.
Upgrade
Version history
2.0.1latest on npm
Audit
Dependencies
acornrequiredCore JavaScript parser library that acorn-node extends and configures.
acorn-bigintrequiredProvides BigInt syntax parsing.
acorn-class-fieldsrequiredAdds support for public and private class instance and static fields.
acorn-dynamic-importrequiredEnables parsing of dynamic `import()` expressions.
acorn-export-ns-fromrequiredAdds support for `export * as ns from` syntax.
acorn-import-metarequiredProvides parsing for the `import.meta` property.
acorn-numeric-separatorrequiredAdds support for numeric separator syntax (e.g., `1_000_000`).
Agent activity
62 hits · last 30 days
node
54
OpenAI (training)
1
Resources
acorn-node — npm install acorn-node · libregistry