我可以做什么学到什么

最近 NPM 圈发生了“一个 17 行代码的模块引发的血案”。
工具模块被作者从 NPM 上撤下,所有直接或者间接依赖这个模块的 NPM 包就忧伤的挂掉了,包括 babel 这样的热门。
而其中的原因大概是这样:作者 Azer 写了一个叫
的工具和某个公司同名了,这天公司的律师要求其删掉这个模块,把 kik 这个名字“让”给他们,作者不答应,律师就直接找 NPM 了,而 NPM 未经作者同意就把包的权限转移给了这家公司。于是,Azer 一怒冲冠,将他所有的 NPM 包全部删掉了。
我们不打算讨论这件事中的、自由之精神、法律细节等等,我只想站在一个员的角度来凑个热闹,聊聊看法。
细分模块是必要的
有人会觉得就这几行函数有必要单独抽取成一个模块吗?我觉得有必要,原因如下:
你应该不想把这个工具函数在各个项目里面重复的去复制粘贴,毕竟 DRY(Don’t Repeat Yourself) 嘛。
人们管理复杂度的通常方法都是拆分,写好一个模块,做好测试,然后直接使用这个模块。“small module” 的想法本来就是很好的。
另外一种想法是我所有的工具函数都统一放在一个模块,这很容易造成工具模块越来越大,什么都往里放。而别人使用这个庞大的工具模块时,很可能其中很多东西根本就用不上。
还有人说这个功能根本不用这么多代码,但是到处写这一行代码也挺烦不是?况且你也不知道一个几行代码能解决的问题有可能随着需求的变化需要更复杂的实现(比如:更多的定制性、性能要求)。
所以,NPM 一直提倡和推动的 small module 的理念并没有什么错,我们不应该因为这个事件就把各种“小模块”的依赖从自己项目中去掉,甚至自己也不写“小模块”了。
不要太依赖他人
如果我们真想构建稳定的应用,非常重要的一点就是“不要将自己的全部身家都拴在别人的裤腰带”上,你永远不知道那个别人什么时候会“扑街”。其实在代码实现中,我们一直都被教导要小心强依赖,依赖过强会导致我们不够灵动。“牵一发而动全身”是很可怕的一件事。
具体到 Node 模块的依赖这件事上,太依赖他人会有些什么“可怕”的事情?
模块全部要从 NPM 的 registry 拉取然后安装,每天的持续集成越来越慢、越来越慢。
像 left-pad 这个模块一样,你依赖的模块被作者怒删了,应用挂掉。
你在 .json 里面指定依赖时使用了
这种表示法(意思是小版本我都要),这表示每次 npm install 时其实获取到的模块依赖很可能是和你测试后发布的版本不一致的(依赖模块频繁发布了新的小版本),心里慌慌的。
你依赖模块的作者是个傻逼,不小心将不兼容的改动当作小版本发布了一个新版。npm install 或者 npm
以后你依赖了这个新版,应用挂掉了。
是不是有点“细思极恐”?那这里抛出一个。如果有更好的方案,欢迎讨论。
破解强依赖
先来列出我们需要些什么:
在发布前“冻结”依赖模块的。这让我们对安装的依赖有信心,依赖模块的版本都是我们验证、测试过的。
在发布前“打包”依赖模块到自己项目。这让我们可以坦然面对我们依赖的某个模块“没有了”这样的囧境。
冻结依赖模块
冻结依赖模块的版本号最简单的办法就是直接在 package.json 里面写死版本号,但是这解决不了深度依赖的问题。我们来看个例子。
假设有下面这样的依赖:
A@0.1.0└─┬ B@0.0.1
└── C@0.0.1
A 模块依赖了 B 模块,B 模块又依赖了 C 模块。我们可以将 B 模块的依赖写死成
版本,但是如果 B 模块对 C 模块的依赖写的是
,会怎样?
这时候 C 模块更新到了
版本,虽然我们安装的 B 模块是
,但是安装的 C 模块却是
。如果不巧这个
刚好有 bug,那我们的模块很有可能就不能正常工作了。
实际上,NPM 提供了一个叫做
npm shrinkwrap
的命令来解决这个问题:
npm-shrinkwrap -- Lock down dependency sSYNOPSIS
npm shrinkwrapDESCRIPTION
locks down the versions of a package's dependencies so that you can control exactly which versions of each
dependency
will be used when your package is installed.
这条命令会根据目前我们
node_modules
目录下的模块来生成一份“冻结”住的模块依赖(npm-shrinkwrap.json)。
还是上面的例子,我们在模块 A 的执行
npm shrinkwrap
后,生成的
npm-shrinkwrap.json
文件内容大概是下面这样:
"name": "A",
"dependencies": {
"version": "0.0.1",
"resolved": "/B-0.0.1.tgz",
"dependencies": {
"version": "0.0.1",
"resolved": "/C-0.0.1.tgz"
然后,当我们执行
npm install
时,依赖查找的“来源”不再是
package.json
,而是我们生成的
npm-shrinkwrap.json
,再也不会突然装上什么
了,依赖里面的模块版本都是我们验证、测试后的版本,让人安心。
npm shrinkwrap
默认只会生成
dependencies
的依赖,不会生成
devDependencies
的依赖,如果你真的需要,可以加
打包依赖模块
实际上,使用 shrinkwrap 冻结依赖模块的版本号后已经“”许多了,pack 这一步看实际情况可以省略,毕竟它还是会带来一些问题的(比如:项目提交的增大、安装时不能很好的利用已有模块的本地缓存等)。那我们来看看怎样把依赖打包进我们的项目。
上面生成的
npm-shrinkwrap.json
字段,表示模块所在的位置,实际上这个字段完全可以写一个文件路径。所以,我们可以递归的遍历
npm-shrinkwrap.json
文件,将所有的 tgz 包先下载到我们项目的某个目录,然后改写
字段为对应的文件路径。这样的功能有已经实现了,我们可以直接享用:
/JamieMason/shrinkpack
还是上面的例子:
A@0.1.0└─┬ B@0.0.1
└── C@0.0.1
shrinkpack
后,会生成下面的打包目录:
node_shrinkpack - B-0.0.1.tgz - C-0.0.1.tgz
node-shrinkwrap.json
"name": "A",
"dependencies": {
"version": "0.0.1",
"resolved": "./node_shrinkpack/B-0.0.1.tgz",
"dependencies": {
"version": "0.0.1",
"resolved": "./node_shrinkpack/C-0.0.1.tgz"
于是,我们以后再进行
npm install --loglevel=http
时会发现依赖模块的安装根本没有请求了(因为依赖都在我们自己的仓库里了嘛)。
可能有人会说,为啥不直接把
node_modules
目录提交进仓库算了?原因主要是这样:
有些模块需要编译,编译是和环境有关的,你当前的环境编译可用,其他环境直接使用该模块不一定能用。
node_modules
目录里面啥东西都有,太凌乱,很容易把提交给搅乱。diff 时突然 diff 出
node_modules
下的、README,你应该不想这样吧?
只模块的 tgz 包,安装编译的过程交给 NPM 命令更明智。
于是,现在我们使用 NPM 模块的正确姿势应该是这样了:
本地安装、更新需要的模块,测试、验证
npm shrinkwrap
将依赖模块的版本冻结
shrinkpack .
将依赖模块打包进仓库
提交代码(注意要将
npm-shrinkwrap.json
node_shrinkpack
一起提交哦)
发布模块或者部署应用
如果你觉得这样很繁琐,可以定义一个 NPM 命令:
"scripts": {
"pack": "npm shrinkwrap & shrinkpack ."}
拆分模块是必要的,我们应该坚持模块“小而美”
不要太依赖他人,一定要有依赖方挂掉的应急方案
npm shrinkwrap
(冻结依赖模块的版本) 加
shrinkpack
(打包依赖模块到自己项目) 来解决依赖模块的不确定性
/cli/shrinkwrap
/JamieMason/shrinkpack
https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/
http://blog.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/
正在倒下的多米诺骨牌
,请小心“牵一发而动全身”。
最近 NPM 圈发生了“一个 17 行代码的模永猎双子资料攻略
千珏推荐视频
河流之王资料攻略
塔姆推荐视频
时间刺客资料攻略
艾克推荐视频
安妮推荐视频
弗拉基米尔
弗拉基米尔攻略
弗拉基米尔推荐视频
德莱厄斯攻略
德莱厄斯推荐视频
德莱文攻略
德莱文推荐视频
希维尔攻略
希维尔推荐视频
阿木木攻略
阿木木推荐视频
泽拉斯攻略
泽拉斯推荐视频
克格莫攻略
克格莫推荐视频
萨科推荐视频
巴德推荐视频
>>>心得:玩英雄联盟究竟我们能学到什么
心得:玩英雄联盟究竟我们能学到什么
13:46:53 条|来源:多玩论坛|作者:似水如命 |
  我们究竟能在LOL学到什么?对待输赢的态度、永不言败的信心、团队合作的意识、善良真诚的言语。
  ---------------------------------
  本文由多玩论坛作者&似水如命 &原创
  同时,&似水如命 &获得88多玩草奖励,加油!【】【】
  ---------------------------------
  首先,很高兴你们能看到我的这篇帖子。
  英雄联盟只是一个游戏。
  新更新一些小想法:
  就像兵书上说的那样:一鼓作气,再而衰,三而竭。
  中路5人推对面家的时候,可以连推2个塔,但是还不后退还在前面顶着,这就是一个非常不好的现象了。
  我经历的这种情况10次有9次都要在第三次被对方团灭。(当然装备超压制的情况下不算。)
  1.论成败人生豪迈,大不了从头再来&&很多人只认输赢不认过程。
  这是我同学跟我说的,他玩了3年的DOTA,他跟我说刚开始玩的时候输了300多局,就一直输。那他也坚持下来了。后来就大部分时间在赢。
  输输赢赢,就像天下大势,分久必合,合久必分。
  关键是看你能从中学到什么。
  在我看来输是一件好事。
  1)它影响了你的心情,但是,你会慢慢变得沉稳。从很愤怒,到淡定,在到以玩味的心情看待一场比赛。最后你会很无所谓的说:大不了就是输,有什么的?玩LOL。练到没脾气为止。
  2)输了能够使你成长,因为你会潜意识的去学习对手的一些团队的方法。别不削一顾,你肯定学习过!而且,你肯定有那么一次深思熟虑的研究过对面的出装、配合,等等。
  3)在败局中,成长自己,做好自己。我同学跟我说:在败局中,你更要找到自己!继续努力补兵,尽力插眼。
  2.坚持就是胜利&&为什么要到20分钟就果断放弃。
  不要让对手的气焰打退你骄傲的心。即使看到自己的基地被打爆,也应无所畏惧!
  我们总是不相信自己,然而我们往往做的比自己想象中的要好得多,不是吗?新兵连训练的时候有个五公里匀速跑,我以为我自己坚持不下来,整整一个连,最后没有一个掉队。这是为什么?我们往往低估了自己,也低估了团队的作用。在20分钟很逆风很逆风的情况下。首先,请相信自己。其次,要相信队友。再次,请运用好游戏的聊天功能,用上进的语言激励队友。即使最后面临失败,你也可以骄傲的说:我努力过。
  3.素质问题&&鼓励比骂人更重要。
  1)不要谩骂,为什么? 首先,骂人的确能给你带来前所未有的愉悦感、成就感,各种优越的感觉。
  其次,我不反对别人骂你,你一定要骂回来这种想法。这种想法我也有。但是有一句话叫做:一句对不起,浇灭了多少个恩恩怨怨? 说对不起的人就输了?谁赢谁输,大家知道。
  2)队友是用来出生入死的。不管事单排还是双排,我们要做到的就是相信队友,如果他真的不是很会玩,可以教的!我在游戏中遇到一个不会玩的木木,最后结果虽然输的很惨,但是我和木木成了很好的朋友。每个人都不是天生的游戏高手,都是需要成长的。你会知道他未来的成就? 举个现实中的例子,我的朋友CS刚开始很菜,现在虐我=虐菜。&这是真事。
  3)被鼓励的人会永远的感激你!而你只不过是说了几句简单的话而已。就算是按照利益划分,你也是终身受益者。而骂人,你将多了一个时时刻刻记恨你的嘴脸。(这是从现实中的说法,毕竟我们生活在现实社会。但是游戏真的就是游戏吗?)
  4.我们应该从英雄联盟这个游戏中学到什么。
  对待输赢的态度。
  永不言败的信心。
  团队合作的意识。
  善良真诚的言语。
  最后说一句话:我们长此以往向别人吹嘘的事情,往往是让我们痛恨的,甚至让我们痛不欲生的事情。
  比如说:这句我们逆风,我们赢了。
  比如说:48:84竟然赢了。我们是!@&(¥&#@(¥&(*@¥&9赢的,哈哈。!
多玩饭盒 海量美女小视频
告别无聊,告别寂寞,众多美女在饭盒里等你来战!
下载地址:
国服第一奥拉夫
┊" target="_blank">
<img src="/yysnapshot/e8b64cc1e56382adc06d9defb51b8ee776b9e0a3" alt=" ┊<>
国服第一奥拉夫
┊" class="hy-videoFigure__img" />
带你搞活动
┊" target="_blank">
<img src="/yysnapshot/d1e20f086ec25ffdac50c" alt=" ┊<>
带你搞活动
┊" class="hy-videoFigure__img" />
<img src="/yysnapshot/7febcd3f" alt="┊ MM°  江苏一区T腿炮┊" class="hy-videoFigure__img" />
电一王者660点排位中
┊" target="_blank">
<img src="/yysnapshot/c88def2532bfb575ad8abfba5fffdd" alt=" ┊<>
电一王者660点排位中
┊" class="hy-videoFigure__img" />
<img src="/yysnapshot/eecfbe4b3993106fee083e3000557" alt="┊ ? AP瑞文开创者       ┊17-24" class="hy-videoFigure__img" />
添加到收藏夹
看完本文后有何评价?
已有0人评价,点选表情后可看到其他玩家的表态。
<span onclick='javascript:if(document.all){clipboardData.setData("Text",location.href);this.innerHTML="[文章地址已复制]";}'
class="btn">[与更多人共享]
游戏数据库
友情链接: |人人网 - 抱歉
哦,抱歉,好像看不到了
现在你可以:
看看其它好友写了什么
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&冉云飞 : 我们能从不幸里学到什么? _ 腾讯 ? 大家
编辑,著有《沉疴:中国教育的危机与批判》《像唐诗一样生活》《给你爱的人以自由》《每个人的故乡都在沦陷》《从成史的偏旁进入成都》等十几种书。现供职于某刊。
《大家》官方微信
微信扫描二维码,每天获取精彩资讯
我们能从不幸里学到什么?
最近的阅读和写作因缘有点神奇,前不久读完大江健三郎的《在自己树下》,知道他对自己智障儿子大江光那不息的爱,终于使大江健三郎成了“我的菜”。与此同时,中国特殊教育博物馆馆长马建强兄因读了我一篇《民国成都“女武训”》――此为少数公开写成都特殊教育先驱罗蜀芳事迹的文字――而使我有机会得以与他一起拜访成都市特殊教育学校,了解到成都特殊教育家罗蜀芳更多鲜为人知的故事。这位受到海伦?凯勒资助与赞赏的杰出女性,受尽磨难,在她的故乡之寂寥鲜闻,到了令人寒心的地步。巧得很,这两天得闲整理书籍,翻到早已购买但尚未读的法国作家让―路易?傅尼叶《爸爸,我们去哪儿?》,随手翻读就手不忍释。傅尼叶生了两个比大江光严重得多的智(残)障儿,可以说任何事都不能自理,甚至连话都说不清楚,只有小儿子能说一句“爸爸,我们去哪儿”这样的话。一个几乎什么都不知道的孩子,偏偏能说出这样一句话,一方面说明其潜意识有到处游玩的天性,另一方面也给包括他爸妈在内的成年人提出了一个类似于天问一般的难题。这个难题让包括傅尼叶在内的人类之纠结近乎是永恒的,因为这问题不会有答案,更不会有标准答案乃至唯一答案。人类为何追求答案乃至标准答案和唯一答案呢?那是因为人类在追寻生存意义的过程中,害怕那种前不着村后不着店的悬置感,那种无所依附的失重感,使人类处于无可逃匿的恐惧中。这个书名,显然并不是有的人所说的那般轻松――或许这些人只不过是被傅尼叶书里轻松而调侃的文字所迷惑――而是深蕴着巨大的焦虑感,暗藏着难以释怀的伤痛。傅尼叶不乏轻松幽默的文字,使得不会深究文字后面意义的人,似乎觉得这只是个故事,傅尼叶也特意造成这样的假相。没有遇着过这样的灾难与不幸的人,如果你还缺少同理心的话,是很难领会其间的悲伤的。这对于傅尼叶来说岂止是两个残酷的事故,简直就是与一生的幸福开了个残酷的玩笑。一般的事故,其伤痛时间短,对于傅尼叶来讲,哪怕两个儿子都去世了(事实上第二个还在世),其伤痛也不可能完全平复。我有两个朋友,都曾生下了智障儿,那种生活的无助感,让我这种彼时尚没有信仰的人见了不敢直视。见面时,安慰与否都在依违两难的微妙境地之中,因为真正的伤痛只有他们独自面对,他人的帮助毕竟是微渺的。他们两人的家庭最终因此一拍两散,至于孩子的后来,也就不忍闻问了。傅尼叶夫妇的与众不同之处在于,生了两个残障儿子后,还敢生第三胎,终于应证了自己并非生活特选出来的倒霉蛋,因为第三个是正常而美丽的女儿。虽然他们最终也离异了,但直面现实的勇气自然比我那两个朋友包括我本人都要强大得多。这样看来,傅尼叶直面现实的勇气,用轻松幽默的笔调,将他两个儿子的生活记录下来的努力,就特别值得感佩。傅尼叶几乎历数孩子给他带来“好处”:无需买书、无需关心他的学业、也不为其求职焦虑等,“更不用担心你们将来能干些什么,因为我们很快就意识到:他们将来什么都干不了。”(p.5)什么都干不了,这实在是悲惨到类似于判了死刑一样的结局,以至于傅尼叶偶然发现小儿子也会撒谎了,都会非常高兴。只有体会到毫无退路的人,才会对发现一根稻草而欢欣鼓舞,撒谎这桩人类常用但又被猛烈批评的行为,原来还用这样的“妙用”,倒是有点出人意料。傅尼叶毕竟是小说家,的确也是能把事故转化成故事的高手。比如他写小儿子托马的手不听儿子使唤,但手挨得近,眼目所及,所以常与手“对话”。他说有时托马与她(指手)窃窃私语,有时吵翻了,“也许他在指责她什么都不会做”“她连怎么抚摸猫咪都不会”,你又为什么忍心指责她呢?其实托马与手的关系,置换成傅尼叶与托马的关系,就不只是一段幽默的故事,最终变成对现实的写照而成为事故。这样“与众不同”的代价虽然巨大,也只能承受下来,除此之外,你还能做什么呢?“我的孩子们和谁都不一样。我如此喜欢与众不同,这一次,我应该满意了吧。”(p.114)这种“满意”道尽了逼迫、无奈、酸楚的混合情绪。说起来,爱好像是人类天生都该拥有的能力,事实上仿佛的确如此。但不幸的是,爱的能力需要很深的后天习得,仅仅依靠本能是远远不够的,因为负面情绪大量蔓延在我们的生活中。人类对负面情绪的抵抗由来已久,那是因为恐惧、悲伤、不幸、倒霉、压抑、愤懑等,带给我们太多苦难的现实压力和艰难回忆。而这一切,都不可能使人获得愉悦。但不幸的是,我们人没有办法把快乐与挣扎完成刀辟斧削的切割,并且用经济学的方法形成有效而清晰的市场分工,就像有上帝就有魔鬼撒旦一样,正、负情绪往往配对出现,使人生成为一场不折不扣的充满撕裂的混合双打。很多人赞赏傅尼叶字里行间的幽默,在我看来,那是被字面的表象所迷惑。我认为他骨子里对生活的热爱与悲凉兼具,但掩忽不住悲凉对他精神及现实生活的侵蚀,这个我们没有必要为他充当一个不面对现实的解人。这种强作解人的做法,或许在很大程度上是谬托知己。遇人不淑往往被人们视作是爱情败裂与友谊破产的“御前侍卫”,其实谬托知己,未必不是把自己的情感与智商用错地方的专有名词。你读着傅尼叶的文字,你真是觉得事事句句都充满了对他的理解,其实你已处于漫游状态,而且由于你的情感不在服务区内,早已无法与其联通了。叶兆言与梅子涵的序言,难免给我这样一种感觉。当然我承认他的幽默,但我更看到他无法排谴的难过。愁苦之时写欢愉之事,而愁苦倍增。值得庆幸的是,裹以幽默之辞,其表达不幸之力倍增,却没有那么令人难堪与让人躲避。那些把伤痛写得直接而悲惨的人,固然能赢得人们一掬同情之泪。但滥情而不节制,几乎会为真正的写作者与高明的读者所拒绝,或许这是傅尼叶要如此表达的内在因由。你如果说他的幽默是绝对的,像一些根本不得要领的佛教徒说他看破红尘――对这些所谓的看透者,我常常想起加缪的终极哲学命题:真正的哲学问题只有自杀――我不用别的恶意来揣度你,而是因为你局外人的身份所决定的。两个残障儿子对不相干的人来说,只是一个可以花半天就可读完的故事,而对傅尼叶来讲是个无法完全排除的终身事故。我愿意再重复一次,我读着傅尼叶大部分轻松幽默的句子,我都深感苦涩,有时甚至觉得他不乏故意搞笑的因子在。从这上面来看,我们甚至可以看到他不想给读者带来痛苦的迫不得已。当然,他有时搞笑得非常妥帖:――――――――――在街上,遇到有人要我资助残障儿时,我都会拒绝。我不敢说自己也有两个残障儿子,怕他们以为我是在开玩笑。我会面带微笑,用轻松的语气告诉他们:“我已经给过钱了。”(P84)―――――――――――――――――――他当然完全可以不管别人如何看,直说自己家中有两个残障儿,自己都需要帮助。但他自尊自救,在意别人的情绪,不愿使自己因悲伤失度而不得体。(日至13日写毕,14日修订于成都)(注:本文发布时略有删节)――――――――――――――附,书籍相关:书名:爸爸,我们去哪儿?作者: (法)让-路易?傅尼叶出版社: 人民文学出版社原作名: Ou on Va, Papa?译者: 李欣出版年: 2010-12ISBN: 5(版权声明:本文系腾讯《大家》独家稿件,未经授权,不得转载,否则将追究法律责任)(责任编辑:余江波)
编辑,著有《沉疴:中国教育的危机与批判》《像唐诗一样生活》《给你爱的人以自由》《每个人的故乡都在沦陷》《从成史的偏旁进入成都》等十几种书。现供职于某刊。
作者其它文章:
文章所在谈资:349本谈资其他文章185本谈资其他文章188本谈资其他文章}

我要回帖

更多关于 我可以做什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信