问题描述
我正在尝试将多行CSS值拆分并合并为一行。例如,我们在CSS文件中具有background-image属性。有时,该属性值将具有多个线性梯度值。如下所示:
background-image: linear-gradient(
right,#000 0%,#fff 20%,#ccc 40%,#ddd 60%,#fff 80%,#000 100%
)
在以上示例中,背景图像值分为多行。因此,我想做的是在REACT的JS下面使用此命令将这些行合并为一行以达到特定目的。这段代码在某些Windows计算机上可以正常运行:
const EOL = require('os');
console.log(getfile.split(EOL));
在上面的JS中,getfile字符串包含多个CSS文件属性和值,并返回以下内容:
大多数Windows计算机上的控制台日志结果:
[
'background-image: linear-gradient(','right,','#000 0%,'#fff 20%,'#ccc 40%,'#ddd 60%,'#fff 80%,'#000 100%',')'
]
在一台Windows计算机上的控制台日志结果:
[
'background-image: linear-gradient(\n' +
'right,\n' +
'#000 0%,\n' +
'#fff 20%,\n' +
'#ccc 40%,\n' +
'#ddd 60%,\n' +
'#fff 80%,\n' +
'#000 100%\n' +
')'
]
此split.(EOL)
在大多数Windows计算机上均可使用。但是,它不能在一个上正常工作。您可以检查控制台结果。在每行中添加了 \ n 文本,然后在该特定版本的Windows中添加了 +(加号)符号,而不是(逗号)。 。由于这个结果,它没有将多行代码合并为一行。
我不确定为什么在特定的Windows计算机中会发生这种情况。
仅供参考:两个Windows计算机节点版本均高于12
解决方法
os.EOL
的值取决于平台:https://nodejs.org/dist/latest-v14.x/docs/api/os.html#os_os_eol。因此,在您的情况下,您不应依赖os.EOL
,而应使用正在处理的文件的实际行尾。现在,\ n或\ n \ r由您的编辑器确定。例如,VSCode支持\ n和\ n \ r。如果使用的是CSS,则CSS文件在不同机器上可能具有不同的行尾的原因之一可能是Git中的autocrlf选项。基本上,可以将Git配置为在结帐时将\ n转换为\ n \ r。确认这是否正确,并且不依赖os.EOL
,因为它只能为您提供当前平台上的预期行尾,这不一定是给定文件使用的行尾。
考虑使用getfile.split(/\r?\n/);
。无论平台/操作系统如何,这都将解析换行符。