The @perfective/build package provides base configurations
and presets for tools like Gulp, TypeScript, Babel, etc.
to reduce code duplication between projects setup.
-
Check that dev dependencies include correct versions of
gulpandtypescript:{ "devDependencies": { "gulp": "^5.0.1", "typescript": "~5.9.2" } } -
Setup
tsconfig.jsonusing the basetsconfig.strict.jsonconfiguration.{ "extends": "@perfective/build/tsconfig.strict.json", "compilerOptions": { "rootDir": "./src" }, "exclude": [ "dist" ] } -
Add the
RequireExtensionandImportExtensionplugins to yourbabel.config.js.RequireExtensionreplaces.jsextensions with the.cjsextensions inrequire()statements.ImportExtensionadds the required.mjs(or.js) extension to theimportandexportstatements for ES modules.import { babelPluginImportExtension, babelPluginRequireExtension } from '@perfective/build/babel'; export default { presets: [], plugins: [ babelPluginRequireExtension, babelPluginImportExtension('js'), // (1) ] };
-
Override the default extension (
mjs).
-
-
Add
prettieras a dev dependency:{ "devDependencies": { "prettier": "^3.6.2" } } -
Setup
.prettierrc.js:import { config } from '@perfective/build/prettier'; export default config;
-
Setup
.prettierignore:# Build dist # ESLint *.js *.cjs *.mjs *.jsx *.ts *.cts *.mts *.tsx
-
Update
package.jsonscripts.{ "scripts": { "lint": "npm run lint:prettier", "lint:prettier": "prettier --write .", "lint:prettier:build": "prettier --check ." } }Use
lint:prettierduring development (to fix code automatically) andlint:prettier:buildto verify the build (to fail if code is not formatted).
-
Add
jestand related peer dependencies as dev dependencies:{ "devDependencies": { "@types/jest": "^30.0.0", "jest": "^30.0.5", "ts-jest": "^29.4.1", } } -
Setup
jest.config.js:import { config } from '@perfective/build/jest'; export default config;
-
Update
package.jsonscripts:{ "scripts": { "test": "jest", "test:build": "jest --clearCache && jest --collectCoverage" } }Use
testfor development testing andtest:buildto test during the build (and fail if test coverage is not sufficient).