Contract-Model-Model-View (CMMV)
Building scalable and modular applications using contracts.
Documentation • Report Issue
Base TypeScript configurations for CMMV projects.
npm install --save-dev @cmmv/tsconfig
# or
yarn add -D @cmmv/tsconfig
# or
pnpm add -D @cmmv/tsconfig
This package provides eleven base TypeScript configurations:
tsconfig.base.json
- Base configuration for all projectstsconfig.node.json
- Configuration for Node.js/backend projects using CommonJStsconfig.node-esm.json
- Configuration for Node.js/backend projects using ES Modulestsconfig.web.json
- Configuration for web/frontend projectstsconfig.build-cjs.json
- Configuration for building libraries in CommonJS formattsconfig.build-esm.json
- Configuration for building libraries in ESM formattsconfig.spec.json
- Configuration for test filestsconfig.vue.json
- Base configuration for Vue.js projectstsconfig.vue-app.json
- Configuration for Vue.js application source filestsconfig.vue-node.json
- Configuration for Vue.js build toolstsconfig.vue-vitest.json
- Configuration for Vue.js testing with Vitest
Extend the base configuration in your tsconfig.json
:
{
"extends": "@cmmv/tsconfig/tsconfig.base.json",
"compilerOptions": {
// Override or add additional options here
}
}
For Node.js projects using CommonJS:
{
"extends": "@cmmv/tsconfig/tsconfig.node.json",
"compilerOptions": {
// Override or add additional options here
}
}
For Node.js projects using ES Modules:
{
"extends": "@cmmv/tsconfig/tsconfig.node-esm.json",
"compilerOptions": {
// Override or add additional options here
}
}
For Node.js ESM projects, you should also add "type": "module"
to your package.json.
For web projects (React, Vue, etc.):
{
"extends": "@cmmv/tsconfig/tsconfig.web.json",
"compilerOptions": {
// Override or add additional options here
}
}
For test files (spec and test files):
{
"extends": "@cmmv/tsconfig/tsconfig.spec.json",
"compilerOptions": {
// Override or add additional options here
}
}
This configuration automatically includes all *.spec.ts
and *.test.ts
files while excluding node_modules, dist, and generated files.
For Vue.js projects, this package provides a set of configuration files to support application development, build tools, and testing.
Create a tsconfig.json
file that extends the Vue base configuration:
{
"extends": "@cmmv/tsconfig/tsconfig.vue.json"
}
The Vue base configuration automatically references the app, node, and test configurations needed for a complete Vue project.
For Vue application source files, use:
{
"extends": "@cmmv/tsconfig/tsconfig.vue-app.json",
"compilerOptions": {
// Override or add additional options here
}
}
For build tools configuration (Vite, etc.):
{
"extends": "@cmmv/tsconfig/tsconfig.vue-node.json",
"compilerOptions": {
// Override or add additional options here
}
}
For Vitest testing configuration:
{
"extends": "@cmmv/tsconfig/tsconfig.vue-vitest.json",
"compilerOptions": {
// Override or add additional options here
}
}
For libraries that need to support both CommonJS and ESM formats, you can use the build configurations:
First, create your base tsconfig.json
:
{
"extends": "@cmmv/tsconfig/tsconfig.base.json",
"compilerOptions": {
// Your base configuration
},
"include": ["src/**/*.ts", "src/**/*.tsx"],
"exclude": ["node_modules", "dist"]
}
Create tsconfig.cjs.json
:
{
"extends": "@cmmv/tsconfig/tsconfig.build-cjs.json",
"include": ["src/**/*.ts", "src/**/*.tsx"]
}
Create tsconfig.esm.json
:
{
"extends": "@cmmv/tsconfig/tsconfig.build-esm.json",
"include": ["src/**/*.ts", "src/**/*.tsx"]
}
Update your package.json
to support both module formats:
{
"name": "your-package",
"version": "1.0.0",
"main": "dist/cjs/index.js",
"module": "dist/esm/index.js",
"types": "dist/types/index.d.ts",
"exports": {
".": {
"import": "./dist/esm/index.js",
"require": "./dist/cjs/index.js"
}
},
"scripts": {
"build": "cmmv build"
}
}
This setup allows your package consumers to use either:
- CommonJS (
require('your-package')
) - ES Modules (
import { something } from 'your-package'
) - TypeScript with full type definitions
- CommonJS module system
- Node.js module resolution
- ES Next target
- TypeScript decorators enabled
- Path aliases for common project directories
- Reasonable defaults for CMMV projects
- Everything from base, plus:
- ES2022 target
- Stricter type checking
- Optimized for Node.js backend development
- Support for ECMAScript Modules (ESM)
- Uses "NodeNext" module system
- Preserves decorator metadata
- Optimized for modern Node.js development
- Full support for top-level await and dynamic imports
- Compatible with packages requiring ESM
- Optimized for library distribution in CommonJS format
- ES2018 target for broad compatibility
- Generates types in a separate directory
- Preserves source maps for debugging
- Strips internal comments for cleaner output
- Compatible with Node.js versions 10+
- Produces modern ESM output with ESNext features
- ES2020 target for better tree-shaking
- Bundler-friendly module resolution
- Generates compatible type definitions
- Preserves source maps
- Optimized for modern bundlers
- Modern ES target
- ESNext module system with bundler resolution
- DOM and DOM.Iterable library types
- JSX support
- Path aliases for web component frameworks
- Stricter type checking
- Vue, React, and other framework support
The configurations include path aliases to make imports cleaner:
// Instead of
import something from "../../models/something";
// You can use
import something from "@models/something";
@models/*
-src/models/*
@services/*
-src/services/*
@controllers/*
-src/controllers/*
@entities/*
-src/entities/*
- And more (see tsconfig files for complete list)
@components/*
-src/components/*
@pages/*
-src/pages/*
@hooks/*
-src/hooks/*
@stores/*
-src/stores/*
@assets/*
-src/assets/*
- And more (see
tsconfig.web.json
for complete list)
MIT