1

以下代码获取文件的内容,替换一些字符,并输出结果:

测试.txt:

# Title

## Title 2

Paragraph

index.js:

#!/usr/bin/env node

require('babel/polyfill')

'use strict'

var fs = require('fs')
  , filename = process.argv[2]

if (process.argv.length < 3) {
  console.log('Usage: node ' + process.argv[1] + ' FILENAME')
  process.exit(1)
}

function massReplace(text, replacementArray) {
  let results = text
  for (let [regex, replacement] of replacementArray) {
    results = results.replace(regex, replacement)
  }
  return results
}

function transformHeadings(text, orig) {
  return massReplace(text,
     [/^## (.*)/gm,     '<h2>$1</h2>'],
     [/^# (.*)/gm,      '<h1>$1</h1>'] ]
  )
}

fs.readFile(filename, 'utf8', function(err, data) {
  if (err) throw err

  data = data.split(/\n\n/gm)
  var tree = data.slice()

  console.log(transformHeadings(data, tree))
})

我收到此错误:

alex@alex-K43U:~/node/m2n$ babel-node index4.js test.txt
/home/alex/node/m2n/index4.js:41
        throw _iteratorError;
              ^
TypeError: undefined is not a function
    at massReplace (/home/alex/node/m2n/index4.js:17:4)
    at transformHeadings (/home/alex/node/m2n/index4.js:30:2)
    at /home/alex/node/m2n/index4.js:39:3
    at fs.js:336:14
    at FSReqWrap.oncomplete (fs.js:99:15)

不知道问题是什么,也不知道是什么throw _iteratorError意思。

我正在使用Babel来解析 ES6 代码。

可能是什么问题呢?

编辑:

这是编译后的函数。但我仍然看不到问题:

function massReplace(text, replacementArray) {
  var results = text;
  var _iteratorNormalCompletion = true;
  var _didIteratorError = false;
  var _iteratorError = undefined;

  try {
    for (var _iterator = replacementArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
      var _step$value = _slicedToArray(_step.value, 2);

      var regex = _step$value[0];
      var replacement = _step$value[1];

      results = results.replace(regex, replacement);
    }
  } catch (err) {
    _didIteratorError = true;
    _iteratorError = err;
  } finally {
    try {
      if (!_iteratorNormalCompletion && _iterator["return"]) {
        _iterator["return"]();
      }
    } finally {
      if (_didIteratorError) {
        throw _iteratorError;
      }
    }
  }

  return results;
}
4

1 回答 1

1

添加

require ('babel/polyfill');

对于某些特性,Babel 使用了一个小的支持库。有关更多信息,请参阅https://babeljs.io/docs/usage/polyfill/http://babeljs.io/docs/usage/runtime/

希望有帮助!

编辑:

所以我注意到实际上transformHeadings没有传递正确的参数。text应该是一个字符串,而不是一个数组。您将希望一次迭代data一行,而不是传入整个数组。

您收到此错误的原因是因为数组没有replace方法,因此引发了异常。不过,我不清楚为什么 Babel 没有在这里正确地重新提出错误,这肯定会增加混乱。

于 2015-04-01T04:33:46.953 回答