Запустите бранч из другого каталога и используйте относительные пути

Мы хотим использовать одну и ту же систему сборки для нескольких проектов. У меня есть файл конфигурации рабочего бранча, который я хочу добавить в подмодуль git, так что этот субмодуль можно ссылаться в нескольких проектах, и изменения легко распространяются (менее хрупкие, чем копирование и вставка, и устанавливает авторитетный источник brunch-config. JS).

Вставка brunch-config.js в подмодуле git, хотя приводит к тому, что моя структура папок заканчивается следующим образом:

WebApp // git root
|---Brunch-Build-System // git submodule
|   |---brunch-config.js
|---node_modules
|---source // all the source code I want compiled

Бранч работает, предполагая, что brunch-config.js будет на том же или более высоком уровне, чем исходный компилятор. В этой настройке это не так. Я пробовал модифицировать свой brunch-config.js, чтобы использовать относительный путь безрезультатно. Вот мой блок files конфигурации Brunch, как он сейчас стоит, без какой-либо попытки относительного пути:

files: {
  javascripts: {
    joinTo: {
      'js/lib.js': /^(?!source\/)/
    },
    entryPoints: {
      'source/scripts/app.jsx': {
        'js/app.js': /^source\//
      },
    }
  },
  stylesheets: {joinTo: 'css/core.css'}
}

Как я могу изменить это, чтобы использовать относительный путь с учетом требуемой структуры папок выше? Возможно ли это?

Ответ 1

Подмодуль должен быть связан с корневой папкой в ​​родительском репо: это gitlink (a специальная запись в основном индексе репо), который записывает, какой SHA1 выгрузил подмодуль.

В вашем случае было бы лучше, если вы можете использовать post-checkout hook, script, гарантируя, что есть символическая ссылка между:

  • brunch-config.js в правильном месте и
  • что Brunch-Build-System / brunch-config.js из подмодуля

Линии, которые нужно включить в крючок, будут в виде строк

#!/bin/bash

if [ ! -e /correct/path/for/brunch-config.js ]; then
  ln -s /correct/path/for/brunch-config.js Brunch-Build-System/brunch-config.js
fi

Хотя OP находится в Windows:

Я закончил просто программным копированием файла и gitignoreing скопированного файла

Ответ 2

В общем, бранч поддерживает относительные пути. Но для того, чтобы он работал, вы должны сначала убедиться, что другие папки watched. См. эту часть в документах. Для вашего случая добавьте это в свою конфигурацию.

paths = {
  watched: ['../source', '../node_modules'],
}

Затем добавьте RegExs на ..\/.

joinTo: {
  'js/lib.js': /^..\/(?!source\/)/
},
entryPoints: {
  'source/scripts/app.jsx': {
    'js/app.js': /^..\/source\//
  },
}

Вместо RegEx вы также можете написать функцию, которая принимает путь в качестве аргумента и должна возвращать, должен ли быть включен путь или нет. См. эту часть в документах.