Open dsonet opened 9 years ago
//fis-command-release\lib\deploy.js 对replace逻辑的替换
if (dest.replace) {
var replace = dest.replace;
if (!Array.isArray(replace)) {
replace = [replace];
}
replace.forEach(function(item) {
if(item.from) {
var reg = item.from;
if(typeof reg === 'string') {
reg = new RegExp(fis.util.escapeReg(reg), 'g');
} else if(!(reg instanceof RegExp)) {
fis.log.error('invalid deploy.replace.from [' + reg + ']');
}
content = content.replace(reg, item.to);
}
});
}
并非只有remote实现了,这部分的替换是通用的,能再核实下么?如果的确有问题请提交一个示例。
@hefangshi 你看一下 fis-command-release\lib\deploy.js 在使用release --dest 的时候,replace配置为如下,则没有任何效果。
replace: [{
from: /\/lib\/amazeui\//gi,
to: '/'
}]
修改之后才可以。
大概知道是什么情况了,应该是你的理解错误
--dest
后面的参数是用于指定发布目标的,发布目标的定义是 deploy
配置的 KEY
,并不专指 remote
或者什么,而是可以任意指定的。
fis.config.set('deploy', {
"targetA": {
from: '/',
to: '/home/work/wwwroot',
replace: {
from: 'A',
to: 'B'
}
},
"targetB": {
from: '/',
to: '/home/work/wwwroot2',
replace: {
from: 'A',
to: 'C'
}
}
});
那么我们在执行 fis release -d targetA
与执行 fis release -d targetB
的时候,执行的是不同的replace规则,与是否是叫 remote
无关。
而你如果没有指定 --dest
,或者指定的 --dest
是一个本地路径,那么由于在 deploy
中没有相应的配置,是不会做替换的。
如果是希望所有的产出无论在什么 deploy
下都生效,你应该在postpackager阶段甚至更前的阶段做替换而非 deploy
。 deploy
中的 replace
是限定在这个 deploy
内的。
@hefangshi 关于deploy的配置,我理解你说的。我所说的只是这里的replace支持的分组规则适应性有点差罢了哈。
@dsonet 我的意思是,replace支持的feature,不会存在remote支持,其他不支持的情况。
@hefangshi 我现在遇到的是replace不支持数组配置。至于remote我值看了源码实现,并未使用过。
官网 http://fis.baidu.com/docs/api/fis-conf.html#deploy 文档中,
replace替换多个字符串 需要replace替换多个字符串,可以使用正则的方式。例如: ··· replace : { from : /www.a.com|www.b.com/, to : function(m){ if(m === 'www.a.com') return 'www.x.com'; if(m === 'www.b.com') return 'www.y.com'; } } ··· from正则表达式中应该加入g开关,否则只会替换一个匹配。
另外建议这里的replace支持数组形式。[{from, to}, {from, to}]刚刚发现数组形式已经实现了,thanks.最新发现是remote中实现了,但deploy中未实现。希望能实现这个特性。