使用v4.2.6

时间:2018-01-04 23:27:44

标签: javascript node.js npm

我使用的是NodeJS v4.2.6,它有一个已知的Block-Scoped声明问题尚未得到支持。我被迫使用此版本,这意味着我必须使用"use strict";行来避免此错误:

SyntaxError: Block-scoped declarations (let, const, function, class) not yet sup
ported outside strict mode

哪种方法很好,但是,我刚刚下载了一个NPM,其语法与我之前看不到的一样:

const request = require('request');
const qs = require('querystring');
const _ = require('underscore');
const crypto = require('crypto');
const Beautifier = require('./beautifier.js');
const assert = require('assert')

class MyClassTest {

    constructor({ key, secret, recvWindow, timeout, disableBeautification }) {
        this.key = key;
        this.secret = secret;
        this.recvWindow = recvWindow;
        this.timeout = timeout || 15000;
        this.disableBeautification = disableBeautification;

        this._beautifier = new Beautifier();
        this._baseUrl = `https://www.thisisatestlol.com/`;
    }
}

我从未在函数的参数区域看到过对象或花括号。这是什么?

在看到我之前谈过的Block-scoped声明错误后,我添加了" use strict&#34 ;;这条线确实清除了消息,但现在显示了另一条消息。

    constructor({ key, secret, recvWindow, timeout, disableBeautification }) {
                ^

SyntaxError: Unexpected token {

我从未处理过这个问题,我该如何修复它并使我的NPM顺利运行?

我添加了Block-scoped声明错误,因为我觉得它与它有关,也许我错了。

1 个答案:

答案 0 :(得分:3)

这是ES6功能:"Object destructuring for function parameters"

它将传入对象中的属性名称分配给与属性名称同名的函数参数。因此,keyarguments[0].key类似,secretarguments[0].secret类似,依此类推。只需保存一些打字。

所以,这个:

constructor({ key, secret, recvWindow, timeout, disableBeautification }) {
   this.key = key;
   // ...
}

的工作原理如下:

constructor(obj) {
   let key = obj.key;
   let secret = obj.secret;
   let recvWindow = obj.key;
   let timeout = obj.timeout;
   let disableBeautification = obj.disableBeautification;

   this.key = key;
   // ...
}

文章参考:

Destructing objects as function parameters in ES6

Use destructuring in function parameters

  

我从未处理过这个问题,我该如何修复它并使我的NPM顺利运行?

在节点v6之前,node.js中不支持破坏功能参数ES6功能的对象,因此如果您不能通过节点v4升级节点版本,则必须编辑代码如下:

constructor(obj) {
   var key = obj.key;
   var secret = obj.secret;
   var recvWindow = obj.key;
   var timeout = obj.timeout;
   var disableBeautification = obj.disableBeautification;

   this.key = key;
   // ...
}

或者使用支持诸如babeljs等ES6功能的转换器,并将该模块转换为ES5代码。

  

我添加了Block-scoped声明错误,因为我觉得它与它有关,也许我错了。

它们是独立的ES6功能。您所使用的v4版本节点正在实现对块作用域let的支持,因此您只能在strict模式下使用它或使用命令行选项。

现在你知道调用了哪些这些功能,你可以在这个表中查找它们:http://node.green/以查看node.js的哪个版本支持什么。