如何控制Handlebars如何生成换行符?

时间:2013-11-22 00:03:09

标签: git cakephp cygwin newline handlebars.js

我正在开发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;
}

如何控制此行为以使其一致且不依赖于平台?

2 个答案:

答案 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

有关详情,请参阅https://stackoverflow.com/a/29888735/117797