Как собрать по-другому, но с тем же package.json? - PullRequest
1 голос
/ 23 апреля 2019

У меня есть 2 версии (ветви) моего приложения: master и dev.Они размещены в разных доменах в Heroku.

Я храню источники в Bitbucket, а затем использую конвейер для развертывания в Heroku.Это очень удобно, но у меня проблема в том, что я не могу сказать BB, чтобы он строил по-другому.В package.json есть строка, которая должна отличаться:

для производства (мастер):

"scripts": {
        "heroku-postbuild": "webpack --config webpack.prod.js"
    },

для dev:

"scripts": {
        "heroku-postbuild": "webpack --config webpack.dev.js"
    },

В результате я хочу получить скомпилированный, сжатый код JavaScript на производстве и отладочный, несжатый - на устройстве.

Я не могу понять, как решить эту проблему.

Я пытался использовать 2 разные версии package.json, используя git .gitattributes и merge = our .Но у него есть 2 ловушки:

  1. У меня все еще есть конфликт при слиянии, и мне приходится все время редактировать этот файл.
  2. Если я устанавливаю какой-то новый пакет в dev, package.json будет обновляться автоматически, но у prod будет своя собственная версия, и сборка завершится сбоем, поскольку у него нет обновленного списка пакетов.

Какое решение этой проблемы правильно?

Решение найдено!

Спасибо @ piotr.wittchen, хотя я использую другое решение, он подтолкнул меня, чтобы найти его.Оказалось, что я могу использовать переменные окружения в package.json https://devcenter.heroku.com/articles/node-best-practices#hook-things-up

Итак, я просто изменил строку в package.json:

"scripts": {
        "heroku-postbuild": "webpack --config webpack.$env.js"
    },

Переменная env равна "dev"в приложении для разработки Heroku и" prod "в prod, и он работает как шарм, нет необходимости иметь разные версии одного и того же файла.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Я некоторое время играл с npm, и вот мое предложение решения этой проблемы:

Создайте сценарий bash с именем heroku-post-build.sh.

Для master ветви,он должен иметь содержимое:

#!/usr/bin/env bash
webpack --config webpack.prod.js

и для dev ответвление:

#!/usr/bin/env bash
webpack --config webpack.dev.js

Внутри цели heroku-postbuild вызовите скрипт bash следующим образом:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "heroku-postbuild": "./heroku-post-build.sh"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

Проблема будет в ситуации, когда вы захотите объединить dev в master, потому что это переопределит скрипт.В таком случае вам нужно будет выполнить сбор git cherry.

Другой подход (который лучше для IMO) - создать две такие цели:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "heroku-postbuild-dev":  "webpack --config webpack.dev.js"
    "heroku-postbuild-prod": "webpack --config webpack.prod.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

и вызвать соответствующую цель в соответствии ск ситуации.Тогда у вас не будет проблем со слияниями.Я не знаю, возможно ли это в настройке вашего проекта.

0 голосов
/ 26 апреля 2019

Мне пришлось изменить строку в package.json и поместить туда переменную env , которая различна для разных приложений ("dev" и "prod"):

"scripts": {
        "heroku-postbuild": "webpack --config webpack.$env.js"
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...