我正在开发我的第一个 Node.js 模块,并且必须执行常见的实用程序,例如检查类型、循环等。
其中一些东西的原生 JS 非常难看。Underscore.js 使其更具可读性并添加了许多新功能。但是,如果我不需要新的东西,我应该使用下划线还是硬着头皮去做?
谢谢!
我正在开发我的第一个 Node.js 模块,并且必须执行常见的实用程序,例如检查类型、循环等。
其中一些东西的原生 JS 非常难看。Underscore.js 使其更具可读性并添加了许多新功能。但是,如果我不需要新的东西,我应该使用下划线还是硬着头皮去做?
谢谢!
在 node.is 中,你可以依赖一些 ES5 的东西,数组迭代函数和实用函数,比如 isArray。在我的节点模块中,我从未使用过下划线,并且由于 map 等数组迭代函数,forEach 永远不需要使用下划线或 lodash。
如果我真的需要它,我不会避免下划线依赖。node.js 平台依赖于几个小模块本身的小模块。那么为什么不依赖下划线呢。
我认为没有理由避免使用让您的生活更轻松的模块。而且,恰巧,underscore.js 是 npm 注册表中最依赖的包(根据https://npmjs.org/ ,截至本答案发布时)。所以,是的,没有理由避免它。
我从未在实际项目中使用过下划线或异步。一旦您知道如何编写好的 javascript 代码,就没有必要使用任何帮助程序库。例如,应该串行执行并且是异步的函数很容易使用简单的“递归while循环”来完成,您不需要加载任何库。
但最后这是个人喜好。如果您对它们感到满意,请使用外部库。
建议:不要查看 github 启动或 npm 安装来决定使用哪个模块。受欢迎并不意味着好。我尝试了很多流行的模块,其中大约 40% 只是坏/错误/不是真的有用。有很多不受欢迎但非常好的模块。受欢迎有助于做出决定,但您不应该仅仅因为它很受欢迎而安装和使用模块。
Underscore 做了正确的事情,即首先检查所有本机 es5 方法,这意味着在本机方法被基本做同样事情的较慢的非本机版本替换时,您不会有太多的性能损失(代码在这里):
var
nativeForEach = ArrayProto.forEach,
nativeMap = ArrayProto.map,
nativeReduce = ArrayProto.reduce,
nativeReduceRight = ArrayProto.reduceRight,
nativeFilter = ArrayProto.filter,
nativeEvery = ArrayProto.every,
nativeSome = ArrayProto.some,
nativeIndexOf = ArrayProto.indexOf,
nativeLastIndexOf = ArrayProto.lastIndexOf,
nativeIsArray = Array.isArray,
nativeKeys = Object.keys,
nativeBind = FuncProto.bind;
注意:早期分配给“Proto”变量的原型。
也就是说,我很确定 V8 拥有大部分(如果不是全部)。作为客户端开发出身,我很高兴能简单地使用原始的裸东西,而不必考虑这次如何或什么库最适合将 IE 踢出石器时代,提供内置方法不像 DOM API 那样丑陋,我会说这些不是。
如果下划线对你的作用比上面的多,那么一定要使用它。如果没有,我会认为这是浪费空间。它在浏览器上所做的只是为您提供旧版浏览器的后备方法,这些方法在 Node.js 中并不是一个持续关注的问题。虽然很轻。如果您在我的团队中并且不想编写您自己的下划线唯一处理的东西的版本,但我更喜欢在我自己的代码中使用直接本机方法名称/参数等,我不会反对任何一种方式在我不需要它们的任何地方都不喜欢依赖项。
我在与浏览器共享的模块中使用下划线,而不是依赖于 ES5。此外,Underscore 有很多 ES5 中没有的非常有用的方法,所以阅读他们的手册页会很有意义。