如何导出使用对象解构定义的常量

时间:2019-01-01 12:43:31

标签: javascript node.js ecmascript-6 eslint es6-modules

在eslint的prefer-destructuring规则的指导下,我定义了一些常量,如下所示:

const {
    NODE_ENV,
    API_URL,
} = process.env;

是否可以通过在语句前加上export来导出这些常量?

export const {
    NODE_ENV,
    API_URL,
} = process.env;

这似乎很自然,但是eslint-plugin-import抱怨违反import/named规则:API_URL not found in '../constants'。实际上,相关MDN page上也没有描述export的用法。

然后我们是否必须在单独的export语句中重复所有常量?

const {
    NODE_ENV,
    API_URL,
} = process.env;

export {
    NODE_ENV,
    API_URL,
};

2 个答案:

答案 0 :(得分:2)

规范的第15.2.2.3条说:

 ...
ExportDeclaration : export VariableStatement
ExportDeclaration : export Declaration

第13.1.4条说:

Declaration : LexicalDeclaration

第13.3条说:

LexicalDeclaration:
   LetOrConst BindingList;

LetOrConst :
 let
 const

BindingList :
 LexicalBinding
 BindingList, LexicalBinding

 LexicalBinding:
  BindingPattern Initializer

因此,此:

 // ExportDeclaration
  export  // export
    // Declaration
    // LexicalDeclaration:
    const // LetOrConst
     // LexicalBindingList
     // LexicalBinding
     { NODE_ENV, API_URL } // BindingPattern
      = process.env; // Initializer

是完全有效的JavaScript。

答案 1 :(得分:2)

  

是否可以通过在语句前面加上前缀来导出这些常量   export

export const {
    NODE_ENV,
    API_URL,
} = process.env;

是的,根据规范,这是完全有效的。您可以在导出的const的声明中使用解构模式。

  

这看起来很自然,但是   eslint-plugin-import   抱怨违反   import/named   规则:API_URL not found in '../constants'

类似该插件的声音已损坏。实际上,您之前的确切用例was reported as working