npm installका डिफ़ॉल्ट व्यवहार अब security-focused होगा, इसलिए जो फीचर अब तक अपने-आप चलते थे वे अब यूज़र द्वारा स्पष्ट अनुमति देने पर ही (opt-in) काम करेंगेallowScriptsका डिफ़ॉल्ट off — install किए जाने वाले external package में मौजूदpreinstall·install·postinstallscripts डिफ़ॉल्ट रूप से block रहेंगे, और सिर्फ़ project में अनुमति दिए गए package ही चलेंगे- सिर्फ़ package install करते ही अपने-आप चलने वाले scripts को रोककर malicious code के घुसने की संभावना कम करने के लिए यह बदलाव किया गया है
node-gypnative build भी block की श्रेणी में आएगा, इसलिए ऐसे package जिनमें सिर्फ़binding.gypहै और अलग install script नहीं है, उनका build भी रुक जाएगा (क्योंकि npm अंदरूनी तौर परnode-gyp rebuildचलाता है)- git·file·link के जरिए लाए गए package के
preparescript भी इसी तरह block होंगे - उपयोग:
npm approve-scripts --allow-scripts-pendingसे देखें कि किन package में scripts हैं →npm approve-scriptsसे सिर्फ़ भरोसेमंद चीज़ों को अनुमति दें, बाकी कोnpm deny-scriptsसे block करें → allow listpackage.jsonमें सेव होगी, इसलिए उसे commit करें
--allow-gitका डिफ़ॉल्टnone— Git repository से सीधे लाए जाने वाले package (और वे आगे जो dependencies खींचते हैं, वे भी) डिफ़ॉल्ट रूप से block रहेंगे, और install के लिए--allow-gitसे अनुमति देनी होगी- इससे वह रास्ता बंद किया गया है जिसमें Git package के अंदर की
.npmrcGit executable को ही बदल सकती थी (--ignore-scriptsइस्तेमाल करने पर भी यह समस्या बची रहती थी) (npm 11.10.0+)
- इससे वह रास्ता बंद किया गया है जिसमें Git package के अंदर की
--allow-remoteका डिफ़ॉल्टnone— https tarball जैसे remote URL से लाए जाने वाले package (transitive dependencies सहित) डिफ़ॉल्ट रूप से block रहेंगे, और install के लिए--allow-remoteसे अनुमति देनी होगी (npm 11.15.0+)- हालांकि
--allow-fileऔर--allow-directoryके डिफ़ॉल्ट इस v12 में नहीं बदलेंगे
- हालांकि
- ऊपर के सभी बदलाव npm 11.16.0 या उससे ऊपर में पहले warning के रूप में उपलब्ध कराए जाएंगे, ताकि आधिकारिक release से पहले ही जाँच और तैयारी की जा सके
- v12 के release का अनुमानित समय जुलाई 2026 है
1 टिप्पणियां
Hacker News टिप्पणियाँ
पता नहीं मैं यह कैसे मिस कर गया कि npm को GitHub ने अधिग्रहित कर लिया था, लेकिन अचानक बहुत-सी बातें समझ आने लगी हैं
Node ecosystem के इतने महत्वपूर्ण हिस्से के लिए इससे बदतर ठिकाना सोचना मुश्किल है
https://github.blog/news-insights/company-news/npm-is-joinin...
यही “Embrace, extend, extinguish” है
https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguis...
postinstall scripts को बहुत पहले हटा दिया जाना चाहिए था, और ये NPM packages का कैंसर हैं
कुछ fetch करते समय गहराई में nested, अनियंत्रित postinstall scripts का यूँ ही random चल पड़ना बहुत ज़्यादा होता है
पता नहीं किसने और कब इसे अच्छा विचार माना था
आम तौर पर आप packaged dependency code को किसी न किसी बिंदु पर चलाने वाले ही होते हैं, और ज़्यादातर वही permissions होती हैं जो install process के दौरान होती हैं
तो ये setup scripts, अच्छे हों या बुरे, बस npm से हटकर उस जगह चली जाएँगी जहाँ
importयाrequireहोता हैजब तक पूरा ecosystem Deno जैसे sandboxed environment में शिफ्ट नहीं होता, यह ज़्यादा से ज़्यादा एक छोटी रुकावट जैसा लगता है। शायद वही योजना हो
अभी तुरंत दिमाग़ में https://www.npmjs.com/package/patch-package आता है
उम्मीद है कि मौजूदा hysteria इस तरह के बेकार फ़ैसलों तक नहीं ले जाएगी
लगता है यह बात 10 साल पहले सार्वजनिक होने के बाद से NPM के अंदर सैकड़ों बार चर्चा में आई होगी
Shai Halud की वजह से अब इसे नज़रअंदाज़ करने लायक छोटा नहीं माना जा सकता
“इसे बाद में ठीक करेंगे” लगभग हमेशा “धत्त, अब तो इसे ठीक करना ही पड़ेगा” बन जाता है
मैं जानना चाहता हूँ कि मौजूदा LTS Node versions, जहाँ तक याद है 22, 24, 26, क्या इस security fix का फ़ायदा देने के लिए bundled npm को v12 तक बढ़ाएँगे
अभी इन सबमें npm v11 शामिल है
v18.19.0[1] और v20.10.0[2] में npm 9 से 10 पर अपग्रेड किया गया था
[1]: https://nodejs.org/en/blog/release/v18.19.0#npm-updated-to-v...
[2]: https://nodejs.org/en/blog/release/v20.10.0
लेख में जैसा बताया गया है, बस सही defaults सेट करने हैं
इस बदलाव की सबसे अच्छी बात यह है कि defaults बदलने पर वे परेशान करने वाले packages तुरंत टूटेंगे जो मानकर चलते हैं कि नया developer बस install चलाएगा और ये settings पहले से enabled होंगी
उदाहरण के लिए, इससे scripts के executable होने की अपेक्षा रखने वाली आदत बंद हो सकती है
सिर्फ़ लेख से यह साफ़ नहीं है, लेकिन लगता है script allowlist global setting नहीं बल्कि per-package अनुमति को support करती है
इससे शायद संगठन-स्तर के ऐसे नियम बनाए रखना आसान होगा जिनमें सिर्फ़ खास packages के लिए scripts की अनुमति हो
सोच रहा हूँ कि क्या package manager settings में इस तरह के unsafe defaults को रोकने के लिए कोई linter है
grepकाफ़ी नहीं है क्या?सोच रहा हूँ कि क्या अभी भी Yarn इस्तेमाल करने की वजह है
पता नहीं Yarn ने भी supply-chain attacks रोकने के लिए safeguards लागू किए हैं या नहीं
अभी तक मुझे सिर्फ़ pnpm के बारे में पता था, npm का भी पीछे-पीछे आना अच्छा है
नवीनतम Yarn release, 4.x, लगभग ज़रूरत से ज़्यादा deterministic behavior सुनिश्चित करती है, और आप पूरी टीम में consistent behavior की अपेक्षा कर सकते हैं
features के स्तर पर बहुत-सी छोटी details हैं, और जब आदत पड़ जाती है तो वे मिलकर बड़ा फ़र्क पैदा करती हैं
अगला major release भी बेहतर performance और उन performance improvements पर आधारित ऐसे features के साथ इसी दिशा में आगे बढ़ेगा जिन्हें अब तक implement नहीं किया जा सका था
संदर्भ के लिए, मैं Yarn का lead maintainer हूँ
supply-chain protection features भी हैं
आख़िरकार धैर्य जवाब दे गया और हम pnpm पर चले गए, और CI तथा local development machines दोनों पर installs काफ़ी तेज़ हो गए
LLM की मदद से migration में लगभग एक दिन लगा
node_modulesमें unpack नहीं किया जाता बल्कि compressed archives से सीधे चलाया जाता हैhttps://yarnpkg.com/features/pnp
यह कुछ-कुछ Java में
.classfile directory tree की जगह.jarइस्तेमाल करने जैसा हैहालाँकि यह थोड़ा hacky है, और editor तथा tooling support काफ़ी बिखरा हुआ है
छोटे files की संख्या बहुत कम होने से, अगर आपको मजबूरी में Windows पर काम करना पड़े तो यह ख़ासतौर पर तेज़ हो सकता है
archives को git repository में भी रखा जा सकता है, जिससे internet और package registry पर निर्भरता हट सकती है
मुझे सच में जवाब नहीं पता
मुझे नहीं पता था कि npm, GitHub के स्वामित्व में है
इससे बहुत-सी बातें समझ आती हैं
इनमें से कुछ को अब समय बीतने के बाद पढ़ना दिलचस्प है
सबसे ऊपर वाला कमेंट यह था: “Microsoft हर चीज़ में अच्छा नहीं है, लेकिन GitHub acquisition ईमानदारी से उम्मीद से कहीं बेहतर निकला। GitHub पर Microsoft-केंद्रित policies थोपने के बजाय Microsoft ने product perspective से GitHub की चीज़ों को ज़्यादा अपनाया। GitHub अभी भी एक अलग कंपनी की तरह operate करता है”
उसे venture funding मिली थी, लेकिन वह sustainable business model नहीं ढूँढ पाई
ecosystem को बचाने के लिए GitHub ने अधिग्रहण किया, और इस acquisition से GitHub को भी कोई बहुत बड़ा फ़ायदा नहीं हुआ
और Microsoft ने GitHub को Azure पर शिफ्ट कर दिया
सोच रहा हूँ कि
package.jsonकी allowlist package version तक pin होती है, या सिर्फ़ package name तकallowScriptsका default off होना अच्छा है[घड़ी देखता है] 18 महीने बाद अब जाकर pnpm की बराबरी कर रहा है क्या?
JavaScript में इसका उद्देश्य क्या है?