Re: [討論] 請大家聊聊 JavaScript的缺陷
在開始之前,先說個笑話
※ 引述《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 的缺陷呢?
--
我無法闡述更多,只能推
推
現在學到崩潰
淚推,同情npm 用戶
這都不是語言本身的問題吧
npm算是用順手 但看完你這篇我是感觸很深的笑了
這不是語言的問題那甚麼才是語言的問題...
笑了給推
就是這樣啊~ ♂
攤手
但換角度說 js就是彈性大 重構比維護更有效益下 的
確是這樣呢
重構比維護更有效益? 小工程師敢跟 lead 說老子覺得重構比繼續每天攪義大利麵還有效益? lead 敢去跟主管說我覺得敝 team 繼續每天攪義大利麵很無意義,建議重構? 技術主管敢去跟其他部門開會說我覺得公司的軟體重構比維護更有效益? 看誰先被釘牆上然後卷舖蓋QQ 阿這時候就別羨慕人家其他師字輩可以學一套混30年 是你各位自己說出重構比維護更有效益的呀 大大每隔一下就重構 底下就吃屎重學新東西 幫QQ
npm 包來包去真的恐怖,還有一堆奇怪的套件
還好我只用 npm is-odd
npm出來還被說是仰賴地獄的救贖 現在被婊成這樣 蠻好
奇大家都用什麼語言跟套件管理的
我只有rust+cargo 覺得比npm好用 其他java ruby pyth
on感覺問題都比npm多
pip 下去,他就是平鋪一層 lib/ 要找哪個環節的哪個函式庫在雷很方便 java 看是哪個框架,至少 gradle 下去也是所有的東西在一個地方排排站 沒看過埋了一層又一層嫌人家找的不夠開心的
順便問一下 有人用過比cargo更屌的建置工具嗎==
仔細看這篇文章 大部分都是在婊函式庫作者 呃 這算語
言問題嗎?那張diff截圖也看不出來是要表達什麼問題
就是古早時代,同兩個被依賴的函式庫,只因為安裝順序不同 就沒事幹產生新lock檔搞人 阿然後社群解法是 $ npx npm-merge-driver install -g
更令我不能理解的是資料結構為什麼不能寫成套件?還
cd ../../../ 這種一行文,寫成套件被笑剛好而已 資料結構你說爬樹還搜尋甚至動到演算法的,寫成套件嘉惠後人就算了 swap A B?!
有跟你報當前版本有安全性疑慮 你不開心的點是?
這是我的錯,沒講清楚 我是指說 package.json 裡我已經努力使用最新版了 結果某個函式庫它的
N層後的相依有 CVE,然後我要負責?
如果你想表達開源函式庫的文件過時了 呃 這在哪個語
言都嘛有 連公司裡面文件都時常過時 到底干js屁事
同意樓上 全篇看下來覺得關JS什麼事
前面幾篇認真討論的才真的是JS本身的問題
你各位寫 JS 到現在都不用 nodejs / npm / npm 衍生物來安裝東西? 還是說覺得語言的 flaw 跟它本身奠基在哪個 framework 沒有關係?
詳細來說這個是 JavaScript 生態的問題 不過的確這和
語言本身可以一起討論
wwww這篇怨念很深
大概是只有spec上的才是語言問題 其他都是使用者的毛
問題是,就像上面的資料結構 人家 PEP, C conf, C++ std 每年都在努力讓語言更好上手,加進一堆常備函式 結果大 JS 生態圈的回應是:「反正社群有」,「不會npm i嗎?」,「我就彈性大啊」 燈愣!?是當作所有開發者的網路流量都不用錢?還是覺得討論 spec 不酷,太古板?
工具鏈或標準庫的問題當然也能算是語言一部分 問題這
篇都婊到開源函式庫了...你有閒自己寫資料結構別人不
一定有啊 你可以不爽不要用 特別去婊一個自己不使用
的函式庫 是在幹嘛?
left-pad 事件言猶在耳
這篇唯一講得有道理的就是那個層層包裝的依賴關係 但
正是這個做法解決了很多c c++ java的依賴地獄 你有沒
有看過因為openssl版本多一位數導致一個c++專案編譯
不過 最後要用一些奇淫手段引入兩個openssl 從結果上
來說做的就是npm一樣的事情
一個專案引用同一個函式的兩個版本,這是工程師在雷的問題吧? 要同時支援兩個版本是你組織的問題還是程式的問題? 這裡說的是同一個釋出版,而不是只說為了承諾而維護老版本的專案
在c++引入兩個不同版本的lib才叫痛苦咧 什麼symbol衝
突header衝突 搞死你
你可以重新針對新symbol/header編譯… 喔對了,要用函式庫就乖乖去跟好人家的釋出管道跟新聞… 當然,這種習慣被 nodejs 生態系搞到光 track down 就炸裂那就是另外一回事惹
推怨念深
可是這是NPM捏XD
所以最後才會說都還沒開始探討 JS 語言本身,光是怎麼開始就已經全身是傷了
專案最近用Lerna 全部都monoRepo
最近用一些套件真的他媽賭爛
幹都不寫type的 我寫type script找不到function用
都要一個一個通靈去看 媽的
javascript要是我可以不要用 鬼才想用
耶 其實現在有多一層啦 /usr/lib/x86_64-linux-gnu/
至少人家都一起在 lib/x86_64-linux-gnu/下排排站,頂多因為專案太大,提供太多lib 所以多一層像是 qt5/libQt5Core.so 這樣子把自己的東西都放一起 還一層一層往下放 lib/ 資料夾咧?嚇死人
生態也算是一部分,沒生態根本也不會有人討論
本篇第一噓,恭喜
你可以改用bower啊
While Bower is maintained, we recommend using Yarn and Webpack or Parcel for front-end projects 雖然 Bower 有在維護,但是前端專案我們
建議使用 yarn 加上 webpack 或 parcel不是我說的喔,
https://bower.io標題下面第一行
js問題就是太容易學了,才會ㄧ堆人學然後一堆人重複造輪
子,不過這應該很難避免,易學難精總還是有它的代價。
這應該都是高階語言的通病啊
要用NPM打包的JS我都會與React一塊用。
不過我都用Yarn居多。
說真的啦,反正都會跳警告,至少 yarn 還會跟你說是幾層後的東西有人戳 npm呢? found 15 low severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details 然後就,過去惹@@?! 喔對了, npm audit fix 後有機率這個剛 clone 下來的專案會直接 error 給你看
都二個月前的文了還挖起來繼續戰啊...
可憐哪
自己寫side project 也很痛苦,不知業界node js怎管
我倒是希望全世界都是結構阿,要不至少也強制不同版本路
徑不衝突,那種同時跑兩個專案會因為全域依賴衝突跑不起
來的依賴管理簡直笑死人,沒docker我都不知道怎麼辦
apt, dnf, yast, pacman 應該都遇不到這個問題?
venv:
好用
然後我不知道你用的npm到底是幾個版本前的,他大概 3 年
前裝出來的就是平的了,你的工具到底多老
btw, I use Arch. 沒意外應該 nodejs, npm 都是最新的穩定版
npm 現在裝的都是平的
除非你曾經有不同lib依賴同一個lib的不同版本
比如說你的A lib 想要用[email protected],但你自己想用[email protected]
但都是用B的同一個版本的情況,裝出來會是平的
那個三層結構是去年7月間去戳程式時的實際情況 以你的例子不就是因為依賴的上游有人偷懶只用舊版 導致依賴性一直往下長嗎? 阿這個舊版剛好依賴一個舊版的上游...,boom! cve warning!!
笑了 我要用的兩個函式庫要依賴兩個openssl版本 我能
怎麼辦
看來只能用妖術了呢…拍拍 已經compiled出來還不能改原碼重編的函式庫,有時候就…很難搞呀
現在是比爛就是了xdxd
Js寫的越深越覺得自己一直在繞圈圈,
某樓一直繞圈圈,不愧是寫 JS 的高手ㄋ
工具幫忙解決相依性問題是一回事,生態圈鼓勵大家隨便一把
抓相依性,從不去思考是不是一定非得引入這個相依,出事了
就硬 override ,那才是真正的問題。說到底不是 JS 本身的
問題,而是生態圈主流作法和 **人的問題** ^^
再好的依賴管理工具也無法解決習慣亂拉依賴的人
說的好 XDDD
雖然已經有人解釋npm了 但我還是想貼個笑話
那都是套件的問題 跟語言本身無關(捧讀
這怨念,是受了什麼刺激哈哈
apt那叫哪門子的能選版本…你就只能用他上面有的阿,要
是沒有,你要嘛重寫程式要嘛自建repo
是不知道你是用了什麼軟體,版本會在 apt 找不到啦… 通常 Ubuntu 會提供至少同一套 lib 的兩個版本,像是 openssl2/1.1 你要的上面找不到,有兩個可能 1. 你要的太新,選的發行版太舊:要麼就自己用系統 toolchain 編新版甚至架 repo 要麼更新系統的版號←可能會被炸(無論是公司或是系統)就是惹 2. 你要的太舊,選的發行版沒收:那就乖乖重寫阿…連 py2轉3都要考慮半天的 u 家都 不收的東西,可能連上游都不想理了,遇到bug/安全漏洞向誰哭? 喔,另外一種情況,你的 apt 是指 Debian,那就…docker 囉
另外,目錄結構是lock的一部分,如果這個專案過去的安裝
方式就是超深樹狀,那同一個lock安裝後的結果也會是
好問題,那要怎麼更新 lock,然後避免在協作下更新 lock 導致 git 大塞車大抱怨? 或許現在近期好很多了啦,但是如我上面截圖,這種自己換位子的 要怎麼讓同組其他同事不炸conflict?
推
只要用 npm ci 就不會動到lock file;升級或新增deps就
要發PR,merge後其他人再npm ci安裝。
問題是不動lock就是要面對那個積塵已久的超深樹狀啊
2018…我第一次掉坑的時候是2015呢…當時什麼都…
可以動啊,你想要 npm dedup 也行,就是動了就是發 PR
其他人一樣等merge 後再 npm ci
恩,剛好驗證我上面回的 上面一腦衝重構,底下就得吃屎學新東西 好好的 npm i 不維護,結果只能跑去生一個新的 ci 指令 然後社群裡就充斥著樓上的解法「阿你可以這樣繞一圈就過啦」 問題是…整個網路上累積幾年的 npm i 教學,然後…現在是每個新人都要踩一遍雷?QQ
前端腦 河河
精闢
推怨念深
3
npm 的問題,我試著安裝了一下 因為說是去年7月遇到的,所以我使用 2020/06/30 發佈的 node 12.18.2 搭配 npm 6.14.5 在只有裝 archiver-utils 的情況下,他很平,可能比我婆軟體還平 archiver-utils 底下沒有 node_modules , readable-stream 底下也沒有2
聽到你說 C# 一樣有 js 四捨五入的問題,我驚呆了,你肯定沒有嘗試過,沒關係,我幫 你試過了! 真不知道你的自信哪裡來的 我承認浮點數是個棘手的問題,但是有的語言會謹慎處理,有的語言就是隨便處理,事實X
其實我覺得戰場大家自己拉開的亂七八糟, 我也不過就是逐一回覆, autocomplete 我也說了根本不是語言的重點, 是其他人重視,這樣可以說你們在討論缺陷, 我在討論 autocomplete 我也覺得是有趣。3
你完全搞不清楚狀況喔。 dotnet 的 Math.Round() 預設是 四捨六入(五遇到前面為基數才進位)的設計,也就是 銀行家捨入法,也就是第三個參數為 ToEven 模式,我指定 AwayFromZero 是因為想走四 捨五入。 拔掉這個,走四捨六入也行,dotnet 就是照本宣科來,根本沒有你說的浮點數精確錯誤3
JavaScript 的概數運算確實沒有實作 IEEE 754 的標準, IEEE 754 中,Nearest value rounding 的方法有兩種: 1. Banker's rounding - 取到最接近的「偶數」 2. 取到最遠離 0 的數(效率佳) 但搞不清楚狀況的是對該語言不熟就隨便拿一個 function 來做概數的人,1
其實我上一篇已經有提到 Rounding mode 的選擇是關鍵了了, 然後那個不叫四捨六入...... 另外 tofixed 又誰跟你說他是四捨五入了.... 他是用浮點數的定位表示法(fixed-point notation) 計算的, 詳細實作有點囉嗦, 自己翻論文.8
不太認同, 如果今天的task是計算1加到10000 從紙上開始 1 + 2 + 3...一直算到10000可以解決問題 用等差數列的公式也可以解決問題 寫段code直接寫個function讓function可以支援不同的min, max也同樣能解決問題 這些方法都能解決問題?難道他們都是好方法嗎?17
我想 auto complete 可以算是開發工具的部分 (我猜任何語言理論上都可以有 auto complete,所以和語言本身無關) 而且在這篇沒看到原原 Po 提到,暫不討論 : 而且我還是那句話, 你今天碰到 ts 世界以外的模組, : 你是要怎麼 autocomplete 跟省時間.2
project scan 就是需要時間, 你檔案數多到一個程度, 就是慢. webpack 有那麼多 tooltip 再加速效能, 難道是假的. 說真的, 這段話反過來說也是可以還給你的. 連自己的 type 跟 convention 都掌握不好的, 是有什麼好靠邀的. 另外 js 的 autocomplete,2
有誰可以告訴我,JavaScript 的 toFixed()為什麼遇到1,4,7這幾個數字後面的5不會 進位呢? --
51
[閒聊] EVGA官網爬蟲程式下載連結: 使用方法: 安裝 Node.js () 開啟cmd後cd到專案內34
[心得] 手機跑Windows exe程式幾年前有一個Exagear的專案,能夠將X86翻譯成ARM的指令,配合Wine就能在手機執行電腦 程式,不需要root。 雖然後來Exagear的技術被華為買走,不過Github有俄羅斯人釋出內含Exagear的Termux Pro ot版。原理是在Termux安裝32位元的Debian Proot環境,再用Wine執行32位元的Windows EX E。24
Re: [問卦] 現在 GNU/Linux 走到那一步了?身為平常都用 Linux 的使用者來推廣分享 順便科普一下 先說結論 可以家用 而且很好用 也不見得要背一堆指令才能用 Linux 但是如果你知道一些指令的話會方便許多 不想看廢話的話可以從最後面往前看16
[問卦] 到底學C語言要幹麻= =如題 常常看到人拿 某某專案 說C語言可以作到這些喔 來說服人學C語言 可是87%的人都黑框框,函式庫只用過libc 因為都2022年惹13
[心得] 如何駭入 Apple, MS 等大公司? (轉)如何駭入 Apple, Microsoft 等大公司? (轉) 原始文章: 作者一直對這行指令感興趣 pip install package_name9
Re: [問卦] 五倍券官網源代碼簡體註釋忘了刪?大家不要這麼嚴格 台灣本來就沒什麼程式人才 中國在各方面都狂甩台灣10條街 (AI, 前端, 資料庫, App開發等等) 抄一點程式碼還好啦 但是"較專業的工程師"會 //註解一下出處 例如下面這個截圖 會註解來自 stackoverflow的哪個連結9
[問卦] JavaScript怎麼那麼鳥?最近剛學JavaScript,真覺得有夠鳥 JS社群也很鳥,充滿沒有編程概念、沒有計算機概念、沒有離散數學概念的developer 最鳥的是,整個社群都沉醉在micropackage無法自拔。 就連判斷數字奇偶,很多人也不願意寫: return n % 2 !== 0- #每日新聞 # 2020-2-12 每日新聞 # FB: # jlrs: 從Rust呼叫Julia並在兩種語言之間共享數據 Julia 是一個跟c++一樣快速的腳本語言
- 【一般問題】 機型名稱: XR 系統版本: 16.1.1