gpt4 book ai didi

node.js - Yarn install workspace 中单个包的生产依赖

转载 作者:搜寻专家 更新时间:2023-10-31 22:53:46 24 4
gpt4 key购买 nike

我正在尝试仅为我的工作区中的单个包安装生产依赖项。这可能吗?

我已经试过了:

yarn workspace my-package-in-workspace install -- --prod

但它正在安装我所有包的所有生产依赖项。

最佳答案

据我所知,yarn 1 不支持它。

如果您尝试在 dockerfile 中安装特定包,则有一个解决方法:

  1. 复制yarn.lock文件和根package.json

  2. 仅复制您需要的包的 package.json:您的包以及您的包所依赖的其他包(在本地 monorepo 中)。

  3. 在 dockerfile 中,手动删除您复制的所有 package.json 的所有 devDependnecies。

  4. 在根 package.json 上运行 yarn install

注意:

完整的 dockerfile 示例:

FROM node:12

WORKDIR /usr/project

COPY yarn.lock package.json remove-all-dev-deps-from-all-package-jsons.js change-version.js ./

ARG package_path=packages/dancer-placing-manager

COPY ${package_path}/package.json ./${package_path}/package.json

RUN node remove-all-dev-deps-from-all-package-jsons.js && rm remove-all-dev-deps-from-all-package-jsons.js

RUN yarn install --frozen-lockfile --production

COPY ${package_path}/dist/src ./${package_path}/dist/src
COPY ${package_path}/src ./${package_path}/src

CMD node --unhandled-rejections=strict ./packages/dancer-placing-manager/dist/src/index.js

从-all-package-jsons.js 中删除-all-dev-deps-

const fs = require('fs')
const path = require('path')
const { execSync } = require('child_process')

async function deleteDevDeps(packageJsonPath) {
const packageJson = require(packageJsonPath)
delete packageJson.devDependencies
await new Promise((res, rej) =>
fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8', error => (error ? rej(error) : res())),
)
}

function getSubPackagesPaths(repoPath) {
const result = execSync(`yarn workspaces --json info`).toString()
const workspacesInfo = JSON.parse(JSON.parse(result).data)
return Object.values(workspacesInfo)
.map(workspaceInfo => workspaceInfo.location)
.map(packagePath => path.join(repoPath, packagePath, 'package.json'))
}

async function main() {
const repoPath = __dirname
const packageJsonPath = path.join(repoPath, 'package.json')
await deleteDevDeps(packageJsonPath)
await Promise.all(getSubPackagesPaths(repoPath).map(packageJsonPath => deleteDevDeps(packageJsonPath)))
}

if (require.main === module) {
main()
}

关于node.js - Yarn install workspace 中单个包的生产依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46937707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com