我正在开发Mac和Windows上的项目。如果我在Mac上构建我的项目,Handlebars模板会导致翻译换行符到包含LF(换行符)字符的字符串。如果我在Windows上执行相同的步骤,它会将换行符转换为包含CRLF(回车符和换行符)字符串的字符串。
目前尚不清楚问题的根源在于Handlebars,Node,Cygwin,Cake还是Git。直观地说,我可能期望Handlebars基于模板的精确性质,Git会自动将模板的新行转换为CRLF或LF,具体取决于我所在的机器。
例如,两台机器上Handlebars输出的差异:
Mac(LF):
function program1(depth0,data)
{
var buffer = "", stack1;
buffer += "\n ";
stack1 = helpers.each.call(depth0, depth0.produces, {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\n";
return buffer;
}
Windows(CRLF):
function program1(depth0,data)
{
var buffer = "", stack1;
buffer += "\r\n ";
stack1 = helpers.each.call(depth0, depth0.produces, {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\r\n";
return buffer;
}
如何控制此行为以使其一致且不依赖于平台?
答案 0 :(得分:0)
试试这个,自己没有测试过:
document.write(String.fromCharCode(11));
请参阅http://nemesis.lonestar.org/reference/telecom/codes/ascii.html
CR为13,LF为10。
答案 1 :(得分:0)
我遇到了同样的问题,与我在Windows上的Mac上的前端开发人员合作。把手在模板中尊重CR LF并传递它们,这导致节点模块中的问题,例如没有正确处理CR字符的highlight.js。
问题是git的默认设置是在Windows上执行git操作时将LF行结尾转换为CR LF行结尾。当我从我的Mac朋友那里提取代码时,转换会发生并让我搞砸。
解决方案是使用以下命令更改git配置设置:
git config --global core.autocrlf input
因此不再进行转换(有关详情,请参阅https://stackoverflow.com/a/5834094/117797)。
我还必须通过清除并重新建立git索引来修复我当前的回购状态:
//clear git index
git rm --cached -r .
//re-write git index
git reset --hard