从不同的目录运行早午餐并使用相对路径

时间:2017-05-04 21:54:16

标签: javascript git git-submodules brunch

我们希望在多个项目中使用相同的构建系统。我有一个工作早午餐配置文件,我想放在一个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运行假设brunch-config.js将与正在编译的源相同或更高级别。在此设置中,情况并非如此。我已经尝试修改我的brunch-config.js使用相对路径无济于事。这是我目前所处的早午餐配置的files块,没有任何相对路径尝试:

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

如果给定上面所需的文件夹结构,我怎么能修改它以使用相对路径?这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

子模块需要与父仓库中的根文件夹关联: gitlink (a special entry in the main repo index),用于记录检出子模块的SHA1

在您的情况下,最好是在post-checkout hook中使用脚本,确保之间存在符号链接

  • 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复制的文件

答案 1 :(得分:0)

一般来说,早午餐支持相对路径。但为了使其工作,您必须首先确保其他文件夹是watched。见this part in the docs。对于您的情况,请将其添加到您的配置中。

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

然后在..\/之前添加RegExs。

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

除了RegEx之外,您还可以编写一个以路径作为参数的函数,并且必须返回是否应该包含路径。请参阅this part in the docs