Javascript在Windows上按预期工作,在Linux上出错

时间:2017-04-28 14:26:42

标签: javascript linux bash ubuntu

我有一个脚本可以解析xml文件并将图像路径字段复制到新文件中。它在使用bash终端的Windows机器上完全按预期工作。我在Ubuntu机器上使用完全相同的代码和xml文件测试它,我得到一个TypeError。这就是Ubuntu给我带来麻烦的地方:

if (catalogLine.indexOf('<image path="') !== -1){
    //if we have an image, read the image file list line by line
    var imageCount = 0;
    var image = '';
    var whitespace = catalogLine.match(/^\s*/)[0].length;
    lineReader.eachLine(resources.fileListToCompare, function(imageLine, imageLast, imageCB) {
        if (catalogLine.indexOf(imageLine) !== -1) {
            //if we match an image, make a copy and store outside of scope
            imageCount++;
            image = ' '.repeat(whitespace) + '<image path="' + imageLine + '"/>';
        }

这是追溯:

/vagrant/ChalkTalkTool/ImageRemoval.js:23
                            image = ' '.repeat(whitespace) + '<image path="' + imageLine + '"/>'
                                        ^
TypeError: Object   has no method 'repeat'
at /vagrant/ChalkTalkTool/ImageRemoval.js:23:17
at /vagrant/ChalkTalkTool/node_modules/line-reader/lib/line_reader.js:277:11
at getLine (/vagrant/ChalkTalkTool/node_modules/line-reader/lib/line_reader.js:166:7)
at Object.nextLine (/vagrant/ChalkTalkTool/node_modules/line-reader/lib/line_reader.js:183:7)
at Object.readNext [as _onImmediate] (/vagrant/ChalkTalkTool/node_modules/line-reader/lib/line_reader.js:269:14)
at processImmediate [as _immediateCallback] (timers.js:363:15)

所以我看到错误在行中:

image = ' '.repeat(whitespace) + '<image path="' + imageLine + '"/>';

我可以假设它与空白字符有关,但我想了解为什么会在Ubuntu上发生这种情况,以及解决这个问题的方法,以便我可以使我的代码在不同系统中更具可移植性(我尝试过使用人物

"&nbsp;" 

而不是空间无效。

1 个答案:

答案 0 :(得分:4)

问题是repeat()函数仅在ES6及更高版本中可用。我假设您运行的Ubuntu实例正在运行ES5。

您可以通过安装polyfill来测试这个理论,或者在代码顶部自己编写一个:

if (!String.prototype.repeat) {
  String.prototype.repeat = function(howManyTimes) {
    var result = '';
    for (var i = 0; i < howManyTimes; i++) {
      result += this;
    }
    return result;
  }
}