从不同的目录运行早午餐并使用相对路径
Posted
技术标签:
【中文标题】从不同的目录运行早午餐并使用相对路径【英文标题】:Run brunch from different directory and use relative paths 【发布时间】:2017-10-03 06:03:35 【问题描述】:我们希望在多个项目中使用相同的构建系统。我有一个工作早午餐配置文件,我想把它放在一个 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'
在给定上述所需文件夹结构的情况下,如何修改它以使用相对路径?这甚至可能吗?
【问题讨论】:
AFIK,Brunch 支持相对路径。您是否在其他操作系统上尝试过? 我没有,但我们要求它在 Windows 上运行,这是我尝试过的。我如何将相对路径集成到现有的正则表达式中? @JohannesFilter 嗨,斯科特,你看我的回答了吗? 【参考方案1】:子模块需要与父 repo 中的根文件夹相关联:它是 gitlink(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 复制的文件
【讨论】:
您能否包括我将放入结帐后挂钩中以制作符号链接的行? @ScottH 我已经编辑了答案,并了解了钩子的外观 谢谢,但是在 Windows 10 上使用它时,它似乎复制了文件,而不是像mklink
那样创建符号链接。有什么想法吗?我还必须切换ln
命令的参数顺序。
如果您以管理员身份运行 mklink,您就可以实际使用它了。如果没有,请使用 mklink /J。
我在使用 mklink
作为 bash 脚本的一部分时遇到了问题,它显示“找不到命令”。【参考方案2】:
一般来说,brunch 支持相对路径。但是为了使它工作,你必须首先确保其他文件夹是watched
。见this part in the docs。对于您的情况,请将其添加到您的配置中。
paths =
watched: ['../source', '../node_modules'],
然后在正则表达式前面加上..\/
。
joinTo:
'js/lib.js': /^..\/(?!source\/)/
,
entryPoints:
'source/scripts/app.jsx':
'js/app.js': /^..\/source\//
,
除了正则表达式,您还可以编写一个将路径作为参数的函数,并且必须返回是否应该包含路径。见this part in the docs。
【讨论】:
我刚要试试这个,它提示我有一个包含早午餐库的 package.json。这需要在子模块中安装早午餐 npm 包。 Brunch 构建运行了一段时间,说它正在编译,但最终我遇到了“JavaScript heap out of memory”错误。 等等,你想让package.json
在子模块之外,对吧?
似乎为了使其工作,package.json
和 node_modules
必须在子模块文件夹中,因为您无法更改默认 node_modules
位置:***.com/questions/26293049/…
以上是关于从不同的目录运行早午餐并使用相对路径的主要内容,如果未能解决你的问题,请参考以下文章