Недавно я обнаружил, что организация каталога проекта в компании очень странная, и все подпроекты размещены вpackages
В каталоге есть такая буффонада? Я проверил информацию и обнаружил, что это относительно популярныйmonorepo
Модель управления проектами. React, Vue и Babel, популярные в последние годы, используют этот режим:
Мы обычно используемmultiple repositories
Режим управления проектами: разбить большой проект на несколько небольших проектов, каждый из которых самостоятельно размещается на gitlab. Этот режим на самом деле неплох, но в некоторых случаях подпроект А зависит от подпроекта Б. Если подпроект Б часто меняется, то каждый раз при изменении В приходится модифицировать А, что очень хлопотно. При разработке front-end фреймворка или UI-библиотеки мы часто сталкиваемся с вышеописанной ситуацией, тогда можно рассмотреть следующееmonorepo
.
monorepo
В конце концов, это всего лишь идея, так как же нам добиться такой организации кода?
Эта статья в основном знакомит с использованием lerna
lerna
Установить глобальноlerna
npm i lerna -g
Lerna основана на git, создайте новый проект на githublearn-lerna
git clone git@github.com:deepred5/learn-lerna.git
cd learn-lerna
Инициализируйте проект:
lerna init
lerna автоматически создастpackages
Папка, в ней будут создаваться наши будущие проекты. Он также создаст новый в корневом каталоге.lerna.json
конфигурационный файл
{
"packages": [
"packages/*"
],
"version": "0.0.0" // 共用的版本,由lerna管理
}
создать пакет
Создаем два пакета:
cd packages
mkdir prpr-lerna-core
cd prpr-lerna-core
npm init -y
cd packages
mkdir prpr-lerna-popular
cd prpr-lerna-popular
npm init -y
Примечание. Мы опубликуем эти два пакета в npm в конце, поэтому, пожалуйста, сделайте имена особенными и не используйте их другими.
добавить зависимости
prpr-lerna-popular
полагатьсяprpr-lerna-core
, то есть два способа добавить зависимости:
Первый способ заключается в измененииprpr-lerna-popular/package.json
,Добавить к
{
"dependencies": {
"prpr-lerna-core": "^1.0.0"
}
}
затем бегиlerna bootstrap
Второй способ - использовать команду напрямуюadd
lerna add prpr-lerna-core --scope=prpr-lerna-popular
Пробежавшись, мы нашлиprpr-lerna-popular
генерируетсяnode_modules
,а такжеnode_modules
сгенерированные указателиprpr-lerna-core
измягкая цепь,аналогичныйnpm link
Эффект:
новыйprpr-lerna-core/index.js
const API = 'https://yande.re/post/popular_recent.json';
module.exports = {
API
}
prpr-lerna-popular
помимо зависимостейprpr-lerna-core
, вы также можете положиться на другие библиотеки с открытым исходным кодом, такие как мы используемaxios
lerna add axios --scope=prpr-lerna-popular
новыйprpr-lerna-popular/index.js
const { API } = require('prpr-lerna-core');
const axios = require('axios');
const getPopularImg = () => axios.get(API)
module.exports = getPopularImg;
// 测试代码,发布时删除
getPopularImg().then((res) => console.log(res.data.length));
есть тест:node packages/prpr-lerna-popular/index.js
При нормальных обстоятельствах результаты могут быть выведены
Опубликовать в нпм
Сначала отправьте весь код
cd learn-lerna
git add .
git commit -m "test publish"
Зарегистрироватьnpmjsучетная запись
npm login
Войдите в свою учетную запись, если локальный npm является зеркалом Taobao, обязательно измените его обратноhttps://registry.npmjs.org/
адрес! ! !
lerna publish
бегатьpublish
, выберите номер версии выпуска
Lerna может помочь нам управлять номерами версий, что очень удобно!
Общие команды
lerna init #初始化
lerna bootstrap #下载依赖包或者生成本地软连接
lerna add axios #所有包都添加axios
lerna add prpr-lerna-core --scope=prpr-lerna-popular #给包prpr-lerna-popularx添加prpr-lerna-core依赖
lerna list
lerna clean
что-то другое
-
Lerna по умолчанию использует централизованную версию, и все пакеты имеют общую версию. Если вы хотите, чтобы разные пакеты имели свои версии, вы можете использоватьIndependentмодель
-
Имя пакета выпуска, если он
@
начало, напр.@deepred/core
, npm считает, что это частный выпуск по умолчанию, вам нужно использоватьnpm publish --access public
выпускать. ноlerna publish
Этот параметр не поддерживается, обратитесь к решению:issues