Skip to main content

requireDependency

Require all packages to declare dependencies with specified versions or that an entry does not exist.

Often useful when using a third party tool like webpack or babel that expects a local entry.

Options

  • dependencies (Optional)
    • Map of dependency name to version string, undefined, or REMOVE
  • devDependencies (Optional)
    • Map of dependency name to version string, undefined, or REMOVE
  • peerDependencies (Optional)
    • Map of dependency name to version string, undefined, or REMOVE
  • optionalDependencies (Optional)
    • Map of dependency name to version string, undefined, or REMOVE

REMOVE Symbol Support

You can use the REMOVE symbol to remove dependencies from packages:

import { REMOVE, requireDependency } from "@monorepolint/rules";

When using REMOVE:

  • The rule only reports an error if the dependency exists
  • Fixing will remove the dependency from package.json
  • No error is reported if the dependency is already missing

Example

import { REMOVE, requireDependency } from "@monorepolint/rules";
export default {
rules: [
requireDependency({
options: {
devDependencies: {
typescript: "^3.8.3",

// Remove deprecated dependencies using REMOVE symbol
lodash: REMOVE,

// Remove using legacy syntax (still supported)
jquery: undefined,
},
dependencies: {
// Ensure specific runtime dependencies
react: "^18.0.0",

// Remove deprecated runtime dependencies
"old-polyfill": REMOVE,
},
peerDependencies: {
// Remove peer dependencies that are no longer needed
"deprecated-peer": REMOVE,
},
},
}),
],
};

Use Cases

Dependency Cleanup: Remove deprecated or unnecessary dependencies across all packages:

requireDependency({
options: {
devDependencies: {
// Remove old testing frameworks
jest: REMOVE,
mocha: REMOVE,
"ts-jest": REMOVE,

// Remove old build tools
webpack: REMOVE,
rollup: REMOVE,
},
dependencies: {
// Remove deprecated polyfills
"core-js": REMOVE,
"babel-polyfill": REMOVE,

// Remove old utility libraries
lodash: REMOVE,
underscore: REMOVE,
},
},
});

Migration Support: Help with framework or tooling migrations:

// Remove Jest dependencies when migrating to Vitest
requireDependency({
options: {
devDependencies: {
jest: REMOVE,
"@types/jest": REMOVE,
"ts-jest": REMOVE,
"jest-environment-jsdom": REMOVE,

// Ensure Vitest is present
vitest: "^1.0.0",
"@vitest/ui": "^1.0.0",
},
},
});

Mixed Operations: Combine removal with version standardization:

requireDependency({
options: {
devDependencies: {
// Standardize versions
typescript: "^5.0.0",
eslint: "^8.0.0",

// Remove deprecated tools
tslint: REMOVE,
jshint: REMOVE,
},
dependencies: {
// Ensure specific runtime versions
react: "^18.0.0",
"react-dom": "^18.0.0",

// Remove old React versions or related packages
"react-addons-test-utils": REMOVE,
"enzyme": REMOVE,
},
},
});

Conditional Dependency Management: Use different rules for different package types:

// Remove build tools from published packages
requireDependency({
options: {
devDependencies: {
webpack: REMOVE,
rollup: REMOVE,
"build-scripts": REMOVE,
},
},
includePackages: ["published-*"],
}),
// Ensure build tools are present in development packages
requireDependency({
options: {
devDependencies: {
webpack: "^5.0.0",
rollup: "^3.0.0",
},
},
includePackages: ["@dev/*"],
});

Peer Dependency Cleanup: Remove peer dependencies that are no longer needed:

requireDependency({
options: {
peerDependencies: {
// Remove peer dependencies for old React versions
"react": REMOVE,
"react-dom": REMOVE,
},
devDependencies: {
// But keep them as dev dependencies for testing
"react": "^18.0.0",
"react-dom": "^18.0.0",
},
},
});

rule source