首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Lerna一起发展

与Lerna一起发展
EN

Stack Overflow用户
提问于 2018-10-26 07:17:14
回答 1查看 1K关注 0票数 2

我在一个10个人的团队里工作,我们刚刚开始使用Lerna。但是当我们都在开发新的特性和修复现有的包时,我们发现了一些问题。

有时,有人不会将更改推到主分支,他们做lerna发布只是为了能够安装该软件包的最新版本,并在他们的项目中使用它。

这给我们所有人带来了麻烦,因为我们没有与包版本同步,而lerna发现了那些人没有更新的包中的更改,并强迫它们发布而不是修改包。对于尚未发布到npm的Lerna包“进行中”,您有什么建议吗?目前,我们使用命令从本地文件安装它:

安装file:path_to_npm_package - 保存

我为什么觉得这么糟?因为这样,它不知道lerna的符号链接,我应该在我的项目中安装lerna包所依赖的所有依赖项。

PS。使用lerna包的项目不是其他lerna包。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-31 18:35:30

有时,有人不会将更改推到主分支,他们做lerna发布只是为了能够安装该软件包的最新版本,并在他们的项目中使用它。

为了防止这种情况发生,您可以使用发布脚本来确保:

  1. 别在叉子上
  2. master
  3. 已经提交了所有的更改
  4. 拥有最新的远程更改
  5. 所有测试都通过了

这将防止您不同步,并确保已发布的版本是干净的。

代码语言:javascript
复制
$ node scripts/prerelease.js && lerna publish

scripts/prerelease.js

代码语言:javascript
复制
const {promisify} = require('util');

const execa = require('execa');
const parse = require('git-url-parse');
const rimraf = promisify(require('rimraf'));
const Listr = require('listr');

const pkg = require('../package');

const tasks = new Listr([
    {
        task: () =>
            execa.stdout('git', ['remote', 'get-url', 'origin']).then((result) => {
                const pkgUrlParsed = parse(pkg.repository.url);
                const gitUrlParsed = parse(result);
                const pkgUrl = pkgUrlParsed.resource + pkgUrlParsed.pathname;
                const gitUrl = gitUrlParsed.resource + gitUrlParsed.pathname;

                if (pkgUrl !== gitUrl) {
                    throw new Error(
                        'Cannot publish from a fork. Please clone source repository directly or ensure that the `package.json` file has a `repository.url` set.'
                    );
                }
            }),
        title: 'Not publishing from fork'
    },
    {
        task: () =>
            execa.stdout('git', ['symbolic-ref', '--short', 'HEAD']).then((result) => {
                if (result !== 'master') {
                    throw new Error('Not on `master` branch. Please switch to `master` branch before publishing.');
                }
            }),
        title: 'On `master` branch'
    },
    {
        task: () =>
            execa.stdout('git', ['status', '--porcelain']).then((result) => {
                if (result !== '') {
                    throw new Error('Unclean working tree. Please commit or stash changes first.');
                }
            }),
        title: 'No uncommitted changes'
    },
    {
        task: () =>
            execa.stdout('git', ['rev-list', '--count', '--left-only', '@{u}...HEAD']).then((result) => {
                if (result !== '0') {
                    throw new Error('Remote has changes you do not have locally. Please pull changes.');
                }
            }),
        title: 'Have latest remote changes'
    },
    {
        task: () => rimraf('**/node_modules'),
        title: 'Removing `node_modules`'
    },
    {
        task: () => execa('yarn'),
        title: 'Installing dependencies using yarn'
    },
    {
        task: () => execa('yarn', ['bootstrap']),
        title: 'Bootstrap packages together with Lerna'
    },
    {
        enabled: () => pkg.scripts.test !== undefined,
        task: () => execa('yarn', ['test']),
        title: 'Running tests'
    },
    {
        enabled: () => pkg.scripts.build !== undefined,
        task: () => execa('yarn', ['build']),
        title: 'Building assets'
    }
]);

tasks
    .run()
    .then(() => console.log('Finished! `'))
    .catch((error) => {
        console.error(error);
        process.exit(1);
    });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53003434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档