写一个文件保持制表符和 EOL

Write a file keeping tabs and EOL

我正在尝试将字符串的内容写入 node.js

中的文件中

我有一些 raml 文件,我可以加入它们。如果我在控制台中打印变量,我会看到它被很好地解析但是一旦我保存在一个文件中,该文件只包含一行:

var raml = require('raml-parser');
var fs = require('fs');
var path = require('path');
var os = require('os')

path.join(__dirname, './')


raml.loadFile('schema.raml').then( function(data) {
 console.log(data);
  var filePath = "schema.raml"; 
  fs.unlinkSync(filePath);
  fs.writeFile("./new.raml", JSON.stringify(data).replace('/\n', os.EOL),     function(err) {
    if(err) {
        return console.log(err);
    }

    console.log("The file was saved!");
}); 


}, function(error) {
  console.log('Error parsing: ' + error);
    });

我添加了替换 EOL 来更改文件中的所有“\n”。如果我删除它,文件将在每一行的末尾包含“\n”。

在控制台上,这是输出:

{ title: 'RAML Flattener',
  baseUri: 'http://github.com/joeledwards/node-flat-raml',
  version: '1',
  mediaType: 'application/json',
  protocols: [ 'HTTP' ],
  resources: 
   [ { relativeUri: '/base',
       methods: [Object],
       resources: [Object],
       relativeUriPathSegments: [Object] } ] }

data 是一个 Javascript 对象;当你 console.log() 时它是如何显示的,它与它在你正在编写的文件中的最终结果没有多大关系。

问题是您正在使用 JSON.stringify(),默认情况下,它不会漂亮地打印输出字符串。

相反,试试这个:

JSON.stringify(data, null, 2)

这将使您的输出看起来像这样:

{
  "title": "RAML Flattener",
  "baseUri": "http://github.com/joeledwards/node-flat-raml",
  "version": "1",
  "mediaType": "application/json",
  "protocols": [
    "HTTP"
  ],
  "resources": [
    {
      "relativeUri": "/base",
      "methods": { ... },
      "resources": { ... },
      "relativeUriPathSegments": { ... }
    }
  ]
}

您可能需要也可能不需要对其输出调用 .replace()。如果你这样做,请使用这个(你使用的那个无效):

.replace(/\n/, os.EOL)