难道只有我一个人想吐槽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 最常下载的包的清单 ...
随机推荐
- mysql分页原理和高效率的mysql分页查询语句
该博来自网络转载!!!供自己学习使用!!! 以前我在mysql中分页都是用的 limit 100000,20这样的方式,我相信你也是吧,但是要提高效率,让分页的代码效率更高一些,更快一些,那我们又该怎 ...
- Git入门仅这篇就够了
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/5978937.html 前言 大家好,我是Cavalier ...
- Git 教程
Git 教程 新建 模板 小书匠 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过设置里的修改模板来改变新建文章的内容. Git使用 Git - 关于版本控制 TortoiseGit日常 ...
- Codeforces Round #347 (Div. 2) (练习)
A: 题意:找到[a, b]的最大公约数: 思路:相同时为本身,不同时为1. 套路:碰到水题别想太多: 猜想:两个相邻数,必有一奇一偶,如果偶数有因子3或者其他,奇数可不可能有相同的呢? 枚举一些数后 ...
- JS-reverse(数组内容颠倒)
var arr1 = [ 1,2,3,4,5,6 ];// arr1.reverse();// alert( arr1 ); //怎么颠倒字符串呢? var str = 'abcdef';alert( ...
- Lisp 函数
(quote x) [返回x] >>>>>>>>>>>>>>>>>>>>> ...
- 【Thinking in Java】Java Callable的使用
Callable<>和Runable类似,都是用于Java的并发执行. 唯一的区别是,Runable的run方法的返回是void,而Callable的call方法是有返回值的. call方 ...
- <<你最喜欢做什么--兴趣问题清单>>总结
二.测试作业 你最喜欢做什么--兴趣问题清单 •根据迄今为止已有的经历,你真正喜欢从事的工作是什么? 目前还没有接触工作,就工作而言,凭自己所学的本领和技术去工作,我认为我会喜欢我所做的工作 •休 ...
- 关于“线程间操作无效: 从不是创建控件’textBox1‘的线程访问它”异常的解决方法
线程间操作无效: 从不是创建控件“textBox1”的线程访问它 背景:通过一个辅助线程计算出的一个值赋给textBox1.text;解决办法:1.直接在窗体的构造函数中加:System.Window ...
- Linux网卡bounding详解
多块网卡绑在一起,作为一个网卡用,实现负载均衡和提高带宽 linux双网卡绑定一个IP地址,实质工作就是使用两块网卡虚拟为一块,使用同一个IP地址,是我们能够得到更好的更快的服务.其实这项技术在 ...