boltpkg / bolt

⚡️ Super-powered JavaScript project management
MIT License
2.35k stars 82 forks source link

Bolt install production #280

Open mindesik opened 4 years ago

mindesik commented 4 years ago

Bolt is not installing --production only packages.

Title Description
Version 0.24.5
Type Request
node 14.11.0
Operating System macOS
Short Description It should run yarn install --production but instead all packages being installed (including devDependencies).
steve-taylor commented 1 year 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'
    ))
)