使用ES6和Node.js,要求包let
或const
的推荐方法是什么?
let _ = require('underscore');
或
const _ = require('underscore');
答案 0 :(得分:4)
除非您计划在文件范围内(或在require
处)重新定义软件包,否则最好使用const
:这将是防止意外重新分配包变量。
例如:
const _ = require('underscore');
// ...
let [a, _] = foo; // SyntaxError: "_" is read-only
由于我们正在讨论ES6,const
和require
,因此提出import
语句也是有意义的,这些语句在很大程度上可以被认为是作为require
的更灵活的版本。 [1]
import _ from 'underscore';
// ...
let [a, _] = foo; // TypeError: duplicate declaration "_"
默认情况下,ES6 import
注册为const
,因此同样会阻止重新分配。
那么,您何时希望使用let
来获取要求?让我们说(没有双关语)你想在某些环境中使用特殊版本的包。
let secureLibrary = require('secureLibrary');
// override all security in dev mode
if (process.env['NODE_ENV'] === 'development') {
secureLibrary = secureLibrary.fake;
}
在这个人为的例子中,在开发过程中,您对secureLibrary的使用将被伪造的替换,可能忽略了自签名的SSL证书或其他一些不适合生产的便利。
总结:大部分时间都使用const
但偶尔会let
提供必要的灵活性,如果您已经在使用ES6,请考虑使用import
!
[1] 请注意:在ES6 import
和CommonJS require
之间存在更多差异,请参阅Using Node.js require vs. ES6 import/export和{{3更多血淋淋的细节。