Open mindesik opened 4 years ago
Run this and then bolt
. It'll do what you expect, but be warned: It will modify your package.json files.
import {getPackages} from '@manypkg/get-packages'
import {writeFile} from 'fs/promises'
import path from 'path'
// remove-dev-deps.js - Removes dev dependencies from a bolt monorepo
const {
packages,
rootPackage: {packageJson: rootPackageJson}
} = await getPackages(process.cwd())
// Get all dependencies used by sub-packages.
const usedPackages = new Set(
packages
.reduce(
(acc, {packageJson: {dependencies = {}}}) => [
...acc,
...Object.keys(dependencies)
],
[]
)
.sort()
)
// Remove packages from the root package.json that aren't any sub-packages' dependencies
rootPackageJson.dependencies = Object.fromEntries(
Object
.entries(rootPackageJson.dependencies)
.filter(([name]) => usedPackages.has(name))
)
await writeFile(
'package.json',
JSON.stringify(rootPackageJson, null, 2) + '\n'
)
// Remove devDependencies from all sub-packages' package.json
await Promise.all(
packages.map(({
relativeDir,
packageJson: {
devDependencies,
...packageJson
}
}) => writeFile(
path.join(relativeDir, 'package.json'),
JSON.stringify(packageJson, null, 2) + '\n'
))
)
Bolt is not installing
--production
only packages.yarn install --production
but instead all packages being installed (including devDependencies).