Babel Comment Extractor
The `babel-extract-comments` library is a utility designed to parse JavaScript code and extract its associated comments, leveraging Babel's (specifically, its earlier parser Babylon) capabilities. It provides methods to process either a JavaScript string or a file path, returning an array of structured comment objects. Each object in the array details the comment's `type` (e.g., 'CommentBlock', 'CommentLine'), its raw `value`, and precise `start` and `end` character positions, along with `loc` (source location data including line and column numbers). The package's current and only major version is 1.0.0, last published in February 2018. Due to its age and lack of subsequent updates, it exclusively supports CommonJS module loading patterns and relies on older Babel parsing internals, making it unsuitable for projects requiring modern JavaScript syntax parsing or native ESM integration. Users should be aware of its abandoned status and potential compatibility issues with contemporary JavaScript language features.
Common errors
-
TypeError: (0, _babelExtractComments.default) is not a function
cause Attempting to use an ES Module `import` statement for a CommonJS-only package, trying to access a default export that doesn't exist in the ES Module wrapper.fixChange your import statement to `const extract = require('babel-extract-comments');` -
SyntaxError: Unexpected token
cause The input JavaScript string or file contains syntax features (e.g., optional chaining `?.`, nullish coalescing `??`, private class fields `#`) that are not supported by the older Babel parser version used by this library.fixEither refactor the JavaScript code to use older syntax, or switch to a different, actively maintained comment extraction library that supports modern ECMAScript features.
Warnings
- breaking This package is CommonJS-only. Attempting to import it using ES Module syntax (`import ... from '...'`) in an ESM context will result in a runtime error.
- gotcha The library was last published in 2018 and uses an older version of Babel's parser (Babylon). It may not correctly parse or may throw errors when encountering modern JavaScript syntax (e.g., optional chaining, nullish coalescing, private class fields, top-level await) introduced after ES2017.
- deprecated The project appears to be abandoned, with no updates or new versions released since 2018. This implies a lack of support for bug fixes, security patches, or new feature development, making it a risky dependency for new projects or those requiring long-term stability.
Install
-
npm install babel-extract-comments -
yarn add babel-extract-comments -
pnpm add babel-extract-comments
Imports
- extract
import extract from 'babel-extract-comments';
const extract = require('babel-extract-comments'); - extract.file
import { file } from 'babel-extract-comments';const extract = require('babel-extract-comments'); const commentsFromFile = extract.file('./path/to/my-file.js');
Quickstart
const extract = require('babel-extract-comments');
const fs = require('fs');
const jsString = `
// This is a line comment
/**
* This is a block comment.
* It can span multiple lines.
*/
const myVariable = 123; // Inline comment
/* Another block comment */
function myFunction() {
/*
* Multi-line
* function comment
*/
console.log('Hello');
}
`;
// Extract comments from a string
const stringComments = extract(jsString);
console.log('Comments from string:', JSON.stringify(stringComments, null, 2));
// Create a dummy file for .file method demonstration
const filePath = './temp-script.js';
fs.writeFileSync(filePath, jsString);
// Extract comments from a file
const fileComments = extract.file(filePath);
console.log('\nComments from file:', JSON.stringify(fileComments, null, 2));
// Clean up the dummy file
fs.unlinkSync(filePath);