JavaScript Module System
JavaScript Module System
Section titled “JavaScript Module System”Overview
Section titled “Overview”Hatchgrid uses ECMAScript Modules (ESM) as the default module system for JavaScript and TypeScript files. This is configured at the root level of the project in the package.json
file with the "type": "module"
setting.
Module Configuration
Section titled “Module Configuration”The project uses the following module-related configurations:
// package.json
{ "type": "module"}
This setting means:
- All
.js
files are treated as ES modules by default - CommonJS files must use the
.cjs
extension explicitly - ES module files can use either
.js
or.mjs
extension
File Extensions
Section titled “File Extensions”.js
- ES module (default).mjs
- ES module (explicit).cjs
- CommonJS module (explicit).ts
- TypeScript file (compiled according to tsconfig settings)
Configuration Files
Section titled “Configuration Files”The following configuration files in the project use ES modules:
commitlint.config.mjs
vitest.config.ts
(uses ESM import/export syntax)client/config/vite.config.shared.mjs
client/config/vitest.config.shared.mjs
client/apps/landing-page/astro.config.mjs
Import/Export Syntax
Section titled “Import/Export Syntax”Use the standard ES module syntax for imports and exports:
// Importingimport { something } from './module.js';import defaultExport from './module.js';
// Exportingexport const myFunction = () => {};export default class MyClass {};
Best Practices
Section titled “Best Practices”- Always use explicit file extensions in imports for
.js
,.mjs
, and.cjs
files - Use package imports without file extensions (e.g.,
import { useState } from 'react'
) - Prefer named exports over default exports for better tree-shaking
- Use dynamic imports for code-splitting:
const module = await import('./module.js')
TypeScript Configuration
Section titled “TypeScript Configuration”TypeScript is configured to work with ES modules through the tsconfig.json
files. The base configuration in client/packages/tsconfig/tsconfig.base.json
includes the appropriate module settings.
Testing
Section titled “Testing”Vitest is configured to work with ES modules by default. The test files use the same import/export syntax as the source files.
Migration Notes
Section titled “Migration Notes”When migrating existing code or adding new files:
- Use ES module syntax (
import
/export
) in all JavaScript and TypeScript files - Rename any CommonJS files (using
require
/module.exports
) to use the.cjs
extension - Update imports to include file extensions for local modules