难道只有我一个人想吐槽npm这种包管理方式么
实在忍不住吐槽
说实话有强迫症的我忍了很久了,实在是忍不住写篇文章来吐槽一下。
标题可能说的有点大了,我要吐槽的是:我可能只需要某一个小小的功能模块A,结果模块A依赖B-F这5个模块,然后B又依赖这10个模块,C又依赖那20个模块...一环套一环下来最后需要下载数不清的模块,虽然下载神马的都是全自动的,但是这样真的好么?
下面从几个方面来吐槽,有不爽的尽管来骂。
文件(夹)的个数
就以下载gulp为例,一个npm install gulp
命令下来,一共下载了1221个文件,651个文件夹,占用空间4.12MB。
直接用到的模块就多达137个.
复制不方便
稍微多引用几个module,然后node_modules
文件夹大的吓死人,文件个数多的吓死人,众所周知,很多时候文件个数多的文件夹甚至可能比文件体积大的文件夹复制更慢,且不说复制慢,就连删除都慢。
有的人可能会说,有了强大的 npm install
还需要复制干嘛,我想说的是,我自己一个小项目为什么要那么依赖于网络?哪天断网了呢?假如没有淘宝等国内npm镜像呢?每次换个地方都要从老外的服务器下载那么多文件,说得不好听点,哪天 npmjs.com
挂了呢?
文件路径太深导致的问题
还是以gulp安装为例,我复制吧,结果复制不了:
我打开某一个很深的文件吧,结果打不开:
你打不开是吧,那我把你剪切到其它文件夹,结果剪切也剪不了:
复制剪切打开都没用,那我直接把你删除了吧,结果删除都删除不了:
真是醉了,我说我把路径复制出来看一下到底有多么深,结果复制出来这个样子:
F:\WORKSP~1\OTT-EP~1\WEBCON~1\RESOUR~1\js_dev\NODE_M~1\NPMINS~1\gulp\39E757~1.1\gulp\NODE_M~1\GULP-U~1\NODE_M~1\DATEFO~1\NODE_M~1\meow\NODE_M~1\READ-P~1\NODE_M~1\read-pkg\NODE_M~1\NORMAL~1\NODE_M~1\VALIDA~1\NODE_M~1\SPDX-C~1\node_modules\spdx-license-ids
以上还只是一个gulp的例子,估计其它比这个深得深的module不计其数。
过于依赖第三方module
阿猫阿狗的小功能都去引用一个第三方模块,很多时候一个模块就几行代码,结果我引用你,你引用他,他又引用他,一旦人家这个模块出了问题你就惨了。
举个例子:
一个叫
isArray
的软件包一天的下载量有88万,2016年2月有1800万次下载量,它本身就一行代码。NPM生态系统中的许多开发者看起来宁愿复用其他人写好的代码而不是自己写。这种做法存在严重的安全隐患,因为一个被广泛使用的软件包存在bug,你的代码也会受到影响,而你却无法自己去修正
代码质量参差不齐
谁敢说发到npm上面去的module都是代码质量很高的?不信你随便到node_modules文件夹下去打开几个js看看,好多代码连最基本的代码风格都恶心的要屎。
最想吐槽的npm install
看似很方便,各大网站上总是喜欢在最显眼的地方写上一行看似方便到爆的命令npm install xxx
,好像在标榜:看,我们的东西多么方便啊,一行命令就搞定一切了!其实呢,简单的背后暗藏了一大堆的坑,稍微复杂一点的框架(或者叫功能)总有那么多需要你去定制化的东西,然后接下来还是需要你去了解他们大量的配置参数。
结语
npm这种代码复用的思想是很好的,但是发展到今天我觉得已经变质了,它的本质是为了极大的促进代码复用,减少重复开发,但是它带来的问题比这个方便更严重,反正,我是已经无力吐槽了。
难道只有我一个人想吐槽npm这种包管理方式么的更多相关文章
- 前端工程化 - 剖析npm的包管理机制
转自https://juejin.im/post/5df789066fb9a0161f30580c 现如今,前端开发的同学已经离不开 npm 这个包管理工具,其优秀的包版本管理机制承载了整个繁荣发展的 ...
- nodejs Yarn替代npm的包管理——快速、安全、可靠性高的依赖管理
Yarn能帮你解决的五件事 转自: http://www.qingpingshan.com/jb/javascript/185590.html 长话短说(TL;DR):在 JavaScript 领域有 ...
- 关于 npm 包管理器最常用的内容都在这儿了
Nodejs的诞生,给前端开发世界带来了翻天覆地的变化. 前端工程化,各种工具,以及向后端的能力扩展. 车子离不开轮子,node(前后端)开发离不开npm这个包管理工具,在这总结下常用配套工具: np ...
- NodeJS包管理工具——npm入门
如今每个语言体系中都有一个包管理工具,PHP的Composer,Ruby的gem,Python的pip,Java的Maven……当然还有Node.js的npm.有的人会奇怪为何要引入又一个新东西来让我 ...
- Node.js_简介及其 npm 包管理器基本使用_npm_cnpm_yarn_cyarn
Node.js 既是语言也是平台,跳过了 Apache.Nginx 等 HTTP 服务器,直接面向前端开发 JavaScript 是由 ECMAScript.文档对象模型(DOM)和浏览器对象模型(B ...
- MacOS安装react。问题 -- npm全局包的权限问题
网上的教程有好多,在这里不一一列举,我只介绍我今天安装成功的步骤 首先,在安装react之前要先配置好node 1.安装node 在这里下载node的安装包https://nodejs.org/en/ ...
- npm包管理工具在一般项目中的应用方法
最近自己在有时间,在通学一些知识点,记录一下,以便以后使用方面 当我们在做项目的时候,如果需要到包管理工具,那么我们一定会经历以下流程: 1.首先在官网下载node.js,然后默认安装到C盘 检查是否 ...
- nodeJS---模块与npm包管理工具
nodeJS---模块与npm包管理工具 一:从模块外部访问另一个模块内的成员; 假如我现在还在D盘中的node文件夹内中的app.js代码改成如下: var msg = 'hello'; var f ...
- NPM 与前端包管理
我们很清楚,前端资源及其依赖管理一直是 npm 的重度使用场景,同时这也一直是 Node.js 普及的重要推动力.但这类应用场景到底有多重度?这是一个很难回答的问题.这份 “npm 最常下载的包的清单 ...
随机推荐
- c# dotfuscator 混淆后无法使用
在实体类中忘记给字段加上 get ;set ;导致编译后程序无法使用. 下面这个(A代码)是可以正常混淆的. public class PhoneUsedStatus { ...
- vs2015 附加到进程找不到w3wp.exe
vs2015 附加到进程找不到w3wp.exe 解决办法: 浏览器打开你访问的IIS地址后就出现了~!!!!!!!!!
- 转载:java 中对类中的属性使用set/get方法的意义和用法
经常看到有朋友提到类似:对类中的属性使用set/get方法的作用?理论的回答当然是封闭性之类的,但是这样对我们有什么作用呢?为什么要这样设计?我直接使用属性名来访问不是更直接,代码更简洁明了吗?下面我 ...
- 字符串分割函数(New)
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Form ...
- Extjs 表单验证后,几种错误信息展示方式
今天要求对form表单验证,进行系统学习一下,故做了几个示例: Ext.onReady(function(){ var panel=Ext.create('Ext.form.Panel' ...
- html5 canvas用动画的形式装载图像
本示例使用HTML5 canvas,简单的编写了装载图片效果, 请使用支持HTML5的浏览器预览效果: 下图为以逐渐横向栅格的效果图 html部分: <!DOCTYPE html> < ...
- Lnux 16.04 VM下安装与汉化
参考linux-公社: http://www.linuxidc.com/Linux/2016-04/130520.htm U盘安装linux16.04 http://www.linuxidc.com ...
- 1306. Sorting Algorithm 2016 12 30
1306. Sorting Algorithm Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description One of the f ...
- Don't Block on Async Code【转】
http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html This is a problem that is brough ...
- 使用jigdo下载debian [windows环境下]
使用jigdo下载debian 本文地址:http://www.cnblogs.com/yhLinux/p/4104451.html 准备工作: 下载jigdo:http://atterer.org ...