我在一个10个人的团队里工作,我们刚刚开始使用Lerna。但是当我们都在开发新的特性和修复现有的包时,我们发现了一些问题。
有时,有人不会将更改推到主分支,他们做lerna发布只是为了能够安装该软件包的最新版本,并在他们的项目中使用它。
这给我们所有人带来了麻烦,因为我们没有与包版本同步,而lerna发现了那些人没有更新的包中的更改,并强迫它们发布而不是修改包。对于尚未发布到npm的Lerna包“进行中”,您有什么建议吗?目前,我们使用命令从本地文件安装它:
安装file:path_to_npm_package - 保存
我为什么觉得这么糟?因为这样,它不知道lerna的符号链接,我应该在我的项目中安装lerna包所依赖的所有依赖项。
PS。使用lerna包的项目不是其他lerna包。
发布于 2019-03-31 18:35:30
有时,有人不会将更改推到主分支,他们做lerna发布只是为了能够安装该软件包的最新版本,并在他们的项目中使用它。
为了防止这种情况发生,您可以使用发布脚本来确保:
master这将防止您不同步,并确保已发布的版本是干净的。
$ node scripts/prerelease.js && lerna publishscripts/prerelease.js
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);
});https://stackoverflow.com/questions/53003434
复制相似问题