Re: [討論] 請大家聊聊 JavaScript的缺陷

看板Soft_Job作者 (星の妄想)時間3年前 (2021/01/06 22:14), 3年前編輯推噓33(34165)
留言100則, 39人參與, 3年前最新討論串18/19 (看更多)
在開始之前,先說個笑話 ※ 引述《keev (a)》之銘言: : 我會試著反駁 互相交流 然而下面這串推文直接被無視 : 推 vi000246: 還要學打包工具 好麻煩 11/03 00:22 : 推 s06yji3: 要打包真的好麻煩,參數也太多太細。 11/03 00:31 : 推 fiiox3: 打包真的.....從來不覺得自己懂過XD 11/03 00:34 好的,沒事幹新年開始就考古,我就廢.jpg 先來看個實際存在的專案結構在 npm install 後 zettlr/node_modules/archiver-utils/node_modules/readable-stream/node_modules/ inherits/LICENSE 三層啊!大大們!光是一個 lib 就埋了三層啊! 有哪個 C/C++/Java/python 編譯完的專案 lib 埋這麼多層的? 我認識的頂多就 /usr/lib/project_name/something.so 或 /usr/lib/python3.??/site_packages/project_name/something.pyc 先不說在 Windows 那種幾乎所有軟體都吃自己不分享的系統 OSX 跟 Linux/BSD 上面大多都是 shared lib 的情境下,這樣搞是要? 喔對了,獨眼龍都知道有個 yarn --flat 可以用,但是,在座有成功用這個參數安裝後 專案動得起來的嗎? 然後,或許有人還記得,早期的 npm 甚至會因為使用者下載源碼的時間落差 導致取用的函式庫版本更迭,導致明明 package.json 沒問題,專案卻無法編譯的慘況 所以才又出了個 .lock 規格,然後官方還建議這個一定要放進去版控 恩恩,然後就 https://i.imgur.com/jQaZa1A.png
想當然爾,菜雞小弟就丟去論壇發問,結果回應居然是: : 請 npx install 某包 -g : (隨回應附上 npm 官方文件來源) 大大!是 -g 啊!在系統固有的套件管理員之外用 global 啊! 是不是沒在 package.json 裡看過 scripts: { "postinstall": "", } 啊? 這隨便寫加上無腦建議人家 sudo npm -g 有沒有突然覺得公司裡 IT 呼吸的空氣真甜美? 我橫豎睡不著,仔細看了半夜的 npm 官方文件,才從字縫裡看出字來 NPM_CONFIG_PREFIX 聖光啊!!! 都已經 2020 了,相依管理這種千禧年初就早在業界已經談到爛、解法多到爛的情況下 js 生態系居然還端出這種垃圾專案管理程式,然後所有人都撇過頭去,只敢討論 NaN 到 底在做什麼、到底有沒有符合標準這種技術細節 喔對了,說到直接建議使用者安裝新軟體 https://github.com/ganeshrvel/npm-electron-root-path/blob/master/lib/index.js https://github.com/domenic/sorted-object/blob/master/lib/sorted-object.js 從沒看過這麼頹廢、衰敗、小學生等級的套件 後者還天殺的有 382,233 Weekly Downloads!!! https://www.npmjs.com/package/sorted-object 這種資料結構 101 型還可以寫成套件,還可以拿來引用? 業界是多少人懶得寫 function 還是不會寫而只會 call function? 太瘋狂了!! 這還不包括整個社群瘋狂重造車輪,接著寫完就拋棄!!! 請問現在要寫個 electron app,我該用 electron-builder、electron-forge、還是 electron-packager? 一個寫完,然後發現太大太雜不好維護,就他X的另起爐灶,然後整個社群就hype惹 我以為我在觀察國高中的童軍康輔社團而不是專業人士社群呢顆顆 npmjs.com 上面多少最後更新在兩年以上,但是每週下載數依舊很高的套件 喔還有很天才的,按照官方文件寫 package.json 結果 npm install 拚命跳出某lib在某版本前有問題,建議更新到某版以上的warning 還有永遠會跳出來的fsevent warning,就說我不是Mac了!!!(怒 還沒開始寫程式,光是搞定框架就挫折連連,是要怎麼舉出 JavaScript 的缺陷呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.39.76.65 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1609942455.A.51A.html

01/06 22:26, 3年前 , 1F
我無法闡述更多,只能推
01/06 22:26, 1F

01/06 22:30, 3年前 , 2F
01/06 22:30, 2F

01/06 22:31, 3年前 , 3F
現在學到崩潰
01/06 22:31, 3F

01/06 22:34, 3年前 , 4F
淚推,同情npm 用戶
01/06 22:34, 4F

01/06 22:39, 3年前 , 5F
這都不是語言本身的問題吧
01/06 22:39, 5F

01/06 22:45, 3年前 , 6F
npm算是用順手 但看完你這篇我是感觸很深的笑了
01/06 22:45, 6F

01/06 22:46, 3年前 , 7F
這不是語言的問題那甚麼才是語言的問題...
01/06 22:46, 7F

01/06 22:47, 3年前 , 8F
笑了給推
01/06 22:47, 8F

01/06 22:48, 3年前 , 9F
就是這樣啊~ ♂
01/06 22:48, 9F

01/06 22:48, 3年前 , 10F
攤手
01/06 22:48, 10F

01/06 22:49, 3年前 , 11F
但換角度說 js就是彈性大 重構比維護更有效益下 的
01/06 22:49, 11F

01/06 22:49, 3年前 , 12F
確是這樣呢
01/06 22:49, 12F
重構比維護更有效益? 小工程師敢跟 lead 說老子覺得重構比繼續每天攪義大利麵還有效益? lead 敢去跟主管說我覺得敝 team 繼續每天攪義大利麵很無意義,建議重構? 技術主管敢去跟其他部門開會說我覺得公司的軟體重構比維護更有效益? 看誰先被釘牆上然後卷舖蓋QQ 阿這時候就別羨慕人家其他師字輩可以學一套混30年 是你各位自己說出重構比維護更有效益的呀 大大每隔一下就重構 底下就吃屎重學新東西 幫QQ

01/06 23:10, 3年前 , 13F
npm 包來包去真的恐怖,還有一堆奇怪的套件
01/06 23:10, 13F

01/06 23:12, 3年前 , 14F
還好我只用 npm is-odd
01/06 23:12, 14F

01/06 23:15, 3年前 , 15F
npm出來還被說是仰賴地獄的救贖 現在被婊成這樣 蠻好
01/06 23:15, 15F

01/06 23:15, 3年前 , 16F
奇大家都用什麼語言跟套件管理的
01/06 23:15, 16F

01/06 23:16, 3年前 , 17F
我只有rust+cargo 覺得比npm好用 其他java ruby pyth
01/06 23:16, 17F

01/06 23:16, 3年前 , 18F
on感覺問題都比npm多
01/06 23:16, 18F
pip 下去,他就是平鋪一層 lib/ 要找哪個環節的哪個函式庫在雷很方便 java 看是哪個框架,至少 gradle 下去也是所有的東西在一個地方排排站 沒看過埋了一層又一層嫌人家找的不夠開心的

01/06 23:18, 3年前 , 19F
順便問一下 有人用過比cargo更屌的建置工具嗎==
01/06 23:18, 19F

01/06 23:33, 3年前 , 20F
仔細看這篇文章 大部分都是在婊函式庫作者 呃 這算語
01/06 23:33, 20F

01/06 23:33, 3年前 , 21F
言問題嗎?那張diff截圖也看不出來是要表達什麼問題
01/06 23:33, 21F
就是古早時代,同兩個被依賴的函式庫,只因為安裝順序不同 就沒事幹產生新lock檔搞人 阿然後社群解法是 $ npx npm-merge-driver install -g

01/06 23:35, 3年前 , 22F
更令我不能理解的是資料結構為什麼不能寫成套件?還
01/06 23:35, 22F
cd ../../../ 這種一行文,寫成套件被笑剛好而已 資料結構你說爬樹還搜尋甚至動到演算法的,寫成套件嘉惠後人就算了 swap A B?!

01/06 23:35, 3年前 , 23F
有跟你報當前版本有安全性疑慮 你不開心的點是?
01/06 23:35, 23F
這是我的錯,沒講清楚 我是指說 package.json 裡我已經努力使用最新版了 結果某個函式庫它的 N層後 的相依有 CVE,然後我要負責?

01/06 23:38, 3年前 , 24F
如果你想表達開源函式庫的文件過時了 呃 這在哪個語
01/06 23:38, 24F

01/06 23:38, 3年前 , 25F
言都嘛有 連公司裡面文件都時常過時 到底干js屁事
01/06 23:38, 25F

01/07 00:03, 3年前 , 26F
同意樓上 全篇看下來覺得關JS什麼事
01/07 00:03, 26F

01/07 00:03, 3年前 , 27F
前面幾篇認真討論的才真的是JS本身的問題
01/07 00:03, 27F
你各位寫 JS 到現在都不用 nodejs / npm / npm 衍生物來安裝東西? 還是說覺得語言的 flaw 跟它本身奠基在哪個 framework 沒有關係?

01/07 00:08, 3年前 , 28F
詳細來說這個是 JavaScript 生態的問題 不過的確這和
01/07 00:08, 28F

01/07 00:08, 3年前 , 29F
語言本身可以一起討論
01/07 00:08, 29F

01/07 00:29, 3年前 , 30F
wwww這篇怨念很深
01/07 00:29, 30F

01/07 00:40, 3年前 , 31F
大概是只有spec上的才是語言問題 其他都是使用者的毛
01/07 00:40, 31F
問題是,就像上面的資料結構 人家 PEP, C conf, C++ std 每年都在努力讓語言更好上手,加進一堆常備函式 結果大 JS 生態圈的回應是:「反正社群有」,「不會npm i嗎?」,「我就彈性大啊」 燈愣!?是當作所有開發者的網路流量都不用錢?還是覺得討論 spec 不酷,太古板?

01/07 00:50, 3年前 , 32F
工具鏈或標準庫的問題當然也能算是語言一部分 問題這
01/07 00:50, 32F
還有 36 則推文
還有 12 段內文
01/07 11:32, 3年前 , 69F
除非你曾經有不同lib依賴同一個lib的不同版本
01/07 11:32, 69F

01/07 11:34, 3年前 , 70F
比如說你的A lib 想要用B@2.0,但你自己想用B@3.0
01/07 11:34, 70F

01/07 11:45, 3年前 , 71F
但都是用B的同一個版本的情況,裝出來會是平的
01/07 11:45, 71F
那個三層結構是去年7月間去戳程式時的實際情況 以你的例子不就是因為依賴的上游有人偷懶只用舊版 導致依賴性一直往下長嗎? 阿這個舊版剛好依賴一個舊版的上游...,boom! cve warning!!

01/07 15:12, 3年前 , 72F
笑了 我要用的兩個函式庫要依賴兩個openssl版本 我能
01/07 15:12, 72F

01/07 15:12, 3年前 , 73F
怎麼辦
01/07 15:12, 73F
看來只能用妖術了呢…拍拍 已經compiled出來還不能改原碼重編的函式庫,有時候就…很難搞呀

01/07 15:25, 3年前 , 74F
現在是比爛就是了xdxd
01/07 15:25, 74F
※ 編輯: brli7848 (42.77.106.21 臺灣), 01/07/2021 17:02:51

01/07 18:14, 3年前 , 75F
Js寫的越深越覺得自己一直在繞圈圈,
01/07 18:14, 75F

01/07 19:56, 3年前 , 76F
某樓一直繞圈圈,不愧是寫 JS 的高手ㄋ
01/07 19:56, 76F

01/07 19:57, 3年前 , 77F
工具幫忙解決相依性問題是一回事,生態圈鼓勵大家隨便一把
01/07 19:57, 77F

01/07 19:58, 3年前 , 78F
抓相依性,從不去思考是不是一定非得引入這個相依,出事了
01/07 19:58, 78F

01/07 19:58, 3年前 , 79F
就硬 override ,那才是真正的問題。說到底不是 JS 本身的
01/07 19:58, 79F

01/07 19:58, 3年前 , 80F
問題,而是生態圈主流作法和 **人的問題** ^^
01/07 19:58, 80F

01/07 20:02, 3年前 , 81F
再好的依賴管理工具也無法解決習慣亂拉依賴的人
01/07 20:02, 81F

01/07 22:36, 3年前 , 82F
說的好 XDDD
01/07 22:36, 82F

01/08 10:13, 3年前 , 83F
雖然已經有人解釋npm了 但我還是想貼個笑話
01/08 10:13, 83F

01/08 10:13, 3年前 , 84F

01/08 11:55, 3年前 , 85F
那都是套件的問題 跟語言本身無關(捧讀
01/08 11:55, 85F

01/08 13:36, 3年前 , 86F
這怨念,是受了什麼刺激哈哈
01/08 13:36, 86F

01/08 13:54, 3年前 , 87F
apt那叫哪門子的能選版本…你就只能用他上面有的阿,要
01/08 13:54, 87F

01/08 13:54, 3年前 , 88F
是沒有,你要嘛重寫程式要嘛自建repo
01/08 13:54, 88F
是不知道你是用了什麼軟體,版本會在 apt 找不到啦… 通常 Ubuntu 會提供至少同一套 lib 的兩個版本,像是 openssl2/1.1 你要的上面找不到,有兩個可能 1. 你要的太新,選的發行版太舊:要麼就自己用系統 toolchain 編新版甚至架 repo 要麼更新系統的版號←可能會被炸(無論是公司或是系統)就是惹 2. 你要的太舊,選的發行版沒收:那就乖乖重寫阿…連 py2轉3都要考慮半天的 u 家都 不收的東西,可能連上游都不想理了,遇到bug/安全漏洞向誰哭? 喔,另外一種情況,你的 apt 是指 Debian,那就…docker 囉

01/08 14:03, 3年前 , 89F
另外,目錄結構是lock的一部分,如果這個專案過去的安裝
01/08 14:03, 89F

01/08 14:03, 3年前 , 90F
方式就是超深樹狀,那同一個lock安裝後的結果也會是
01/08 14:03, 90F
好問題,那要怎麼更新 lock,然後避免在協作下更新 lock 導致 git 大塞車大抱怨? 或許現在近期好很多了啦,但是如我上面截圖,這種自己換位子的 要怎麼讓同組其他同事不炸conflict?

01/08 23:17, 3年前 , 91F
01/08 23:17, 91F
※ 編輯: brli7848 (42.77.23.173 臺灣), 01/09/2021 13:17:02

01/09 18:30, 3年前 , 92F
只要用 npm ci 就不會動到lock file;升級或新增deps就
01/09 18:30, 92F

01/09 18:30, 3年前 , 93F
要發PR,merge後其他人再npm ci安裝。
01/09 18:30, 93F

01/09 19:54, 3年前 , 94F
問題是不動lock就是要面對那個積塵已久的超深樹狀啊
01/09 19:54, 94F

01/09 19:56, 3年前 , 95F

01/09 19:57, 3年前 , 96F
2018…我第一次掉坑的時候是2015呢…當時什麼都…
01/09 19:57, 96F

01/09 21:29, 3年前 , 97F
可以動啊,你想要 npm dedup 也行,就是動了就是發 PR
01/09 21:29, 97F

01/09 21:29, 3年前 , 98F
其他人一樣等merge 後再 npm ci
01/09 21:29, 98F
恩,剛好驗證我上面回的 上面一腦衝重構,底下就得吃屎學新東西 好好的 npm i 不維護,結果只能跑去生一個新的 ci 指令 然後社群裡就充斥著樓上的解法「阿你可以這樣繞一圈就過啦」 問題是…整個網路上累積幾年的 npm i 教學,然後…現在是每個新人都要踩一遍雷?QQ

01/09 22:28, 3年前 , 99F
前端腦 河河
01/09 22:28, 99F

01/10 11:58, 3年前 , 100F
精闢
01/10 11:58, 100F
※ 編輯: brli7848 (42.77.23.173 臺灣), 01/10/2021 15:03:32
文章代碼(AID): #1VzSMtKQ (Soft_Job)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 18 之 19 篇):
文章代碼(AID): #1VzSMtKQ (Soft_Job)