// Создаем связь, можно методом в модели, можно на лету, как в примере
Category::resolveRelationUsing('categoryForRating', fn($q) => $orderModel->belongsTo(Category::class, 'id', 'id'));
Category::
withCount('categoryForRating as rating')
->get(['name', 'id', 'rating_count as rating']);
git checkout master
git commit-tree -p master -p feature -m "Overriding master with feature" feature^{tree}
12346aa23590aa
git merge --ff 12346aa23590aa
FROM node:lts-alpine as build
WORKDIR /app
# копируем исходный код
COPY ./ ./
# устанавливаем зависимости
RUN npm ci
# Компилируем приложение
RUN npm run build
# оставляем только production зависимости
RUN npm ci --prod
# опционально удаляем из исходников всякие тесты, ts-файлы и т.п.
FROM node:lts-alpine as app
WORKDIR /app
# копируем сначала node_modules
COPY --from=build /app/node_modules ./node_modules
# а потом всё остальное
COPY --from=build /app ./
# и запускаем
CMD [ "node", "/app/app.js" ]
COPY --from=build /app/node_modules ./node_modules
будет взят из кэша. А это и есть все наши 400 мегабайт зависимостей.$ docker build .
Sending build context to Docker daemon 6.656kB
Step 1/11 : FROM node:lts-alpine as build
---> 1c342643aa5c
Step 2/11 : WORKDIR /app
---> Using cache
---> 01d641ac9d8b
Step 3/11 : COPY ./ ./
---> 2a369bda0312
Step 4/11 : RUN npm ci
---> Running in 5becac2f9f07
added 2 packages in 1.914s
Removing intermediate container 5becac2f9f07
---> c010ba772a08
Step 5/11 : RUN npm run build
---> Running in de6fd7f872a5
> docker-node@1.2.3 build /app
> echo building app
building app
Removing intermediate container de6fd7f872a5
---> dc80bc125954
Step 6/11 : RUN npm ci --prod
---> Running in 825f86a54af5
npm WARN prepare removing existing node_modules/ before installation
added 1 packages in 0.079s
Removing intermediate container 825f86a54af5
---> a00a029b86dc
Step 7/11 : FROM node:lts-alpine as app
---> 1c342643aa5c
Step 8/11 : WORKDIR /app
---> Using cache
---> 01d641ac9d8b
Step 9/11 : COPY --from=build /app/node_modules ./node_modules
---> Using cache
---> 81d587ccf147
Step 10/11 : COPY --from=build /app ./
---> bb40061f06b6
Step 11/11 : CMD [ "node", "/app/app.js" ]
---> Running in e6b9e08d9d8f
Removing intermediate container e6b9e08d9d8f
---> eceb38619009
Successfully built eceb38619009
mounted() {
this.$el.querySelectorAll('input').forEach(n => n.dispatchEvent(new Event('input')));
},
<md-button class="md-primary">Primary</md-button>
<v-btn small color="primary">Primary</v-btn>
<fish-button type="primary">Primary</fish-button>
<q-btn color="primary" label="Primary" />
<el-button type="primary">Primary</el-button>
<b-button variant="success">Button</b-button>
<Button type="primary">Primary</Button>
<Button primary">Primary</Button>
<md-button class="u-mb20 md-primary">Primary</md-button>
// Behavior Subject
// инициализируем где-то в сервисе и помещаем первое значение
bSubject = new BehaviorSubject("a");
// создаем метод который будет возвращать наш инстанс bSubject
getSubject = () => return this.bSubject
// В компененте инжектим сервис, вызываем метод getSubject и подписываемся
bSubject.subscribe((value) => {
console.log("Subscription got", value);
// Тут выполняем действия при смене языка
});
// Позже в другом месте пользователь меняет язык и мы сохраняем его опять в поток
bSubject.next("c"); // Subscription got c