split.EOL 在 Windows 中给出不同的结果

split.EOL give different results in Windows

我正在尝试将多行 CSS 值拆分并连接成一行。例如,我们在 CSS 文件中有背景图像 属性。有时 属性 值会有多个线性梯度值。如下所示:

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 文件属性和值以及 returns 这个:

大多数 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,而应使用您正在使用的文件的实际 line-endings。现在是 \n 还是 \n\r 由您的编辑器决定。例如,VSCode 支持 \n 和 \n\r。 CSS 文件在不同机器上可能具有不同行尾的原因之一可能是 Git 中的 autocrlf 选项(如果您使用的话)。基本上,Git 可以配置为在结帐时将 \n 转换为 \n\r。确认这是否属实,不要依赖 os.EOL,因为它只会给你 expected 当前平台上的行结尾,这不一定是给定文件使用的。

考虑使用 getfile.split(/\r?\n/);。这将解析换行符,而不管 platform/OS.