在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,
};
答案 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。