2016-12-10 8 views
8

मैं npm install के बजाय yarn install का उपयोग करके बल देना चाहता हूं। मैं npm install में त्रुटि उठाना चाहता हूं। package.json में मुझे क्या करना चाहिए?नोड मॉड्यूल के लिए एनपीएम इंस्टॉल के बजाय बल यार्न इंस्टॉल करें?

+0

क्या त्रुटि आप के साथ सामना कर रहे हैं ** NPM स्थापित * * –

+0

यह संभवतः एक त्रुटि नहीं है जिसे वह सामना कर रहा है, बल्कि यह सुनिश्चित करने की इच्छा है कि उसकी पूरी टीम यार्न का उपयोग कर रही है। एक टीम पर काम करते समय यार्न एनपीएम के कारण होने वाली कई समस्याओं को हल करता है। –

उत्तर

11

अपने preinstall स्क्रिप्ट में आप एक मिनी नोड स्क्रिप्ट जो सभी प्लेटफार्मों पर काम करना चाहिए, pgrep की तरह (और अन्य आम * nix आदेश और ऑपरेटरों) चला सकते हैं बातें जबकि विंडोज़ पर काम नहीं करेगा जब तक कि विंडोज 10 को व्यापक रूप से गोद लेने के लिए नहीं मिला है।

मैंने निम्न स्क्रिप्ट का परीक्षण नोड v4.7.0 (npm v2.15.11) और नोड v7.2.1 (npm v3.10.10) पर किया। मुझे लगता है कि यह सब कुछ के बीच में काम करता है। यह वर्तमान में चल रही प्रक्रिया पर पर्यावरण चर की जांच करके काम करता है - npm_execpath वर्तमान में चल रहे "एनपीएम" स्क्रिप्ट का पथ है। यार्न के मामले में, इसे /path/to/yarn/on/your/machine/yarn.js पर इंगित करना चाहिए।

"scripts": { 
    "preinstall": "node -e \"if(process.env.npm_execpath.indexOf('yarn') === -1) throw new Error('You must use Yarn to install, not NPM')\"" 
} 

नोट: Alexander's answer से अपडेट - इस प्रयोक्ता
npm install --ignore-scripts का उपयोग करता है, तो काम नहीं करेगा। आप तारीफ के काबिल है।

आप NPM स्क्रिप्ट के बारे में अधिक पढ़ सकते हैं: https://docs.npmjs.com/misc/scripts

जहाँ तक npm_execpath वातावरण चर के रूप में है, जबकि दस्तावेज नहीं मुझे शक है कि यह कभी बदल जाएगा। यह npm की कई प्रमुख रिलीज के लिए आसपास रहा है और यह "वास्तव में इस के लिए बेहतर नाम नहीं है" परीक्षण पास नहीं करता है।

+0

&& एनपीएम स्क्रिप्ट में ठीक है क्योंकि उन्हें कमांड प्रॉम्प्ट द्वारा निष्पादित किया जाता है, पावरहेल नहीं। – cchamberlain

+0

आह, धन्यवाद। मैंने सोचा कि विंडोज़ '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'है। मैंने अपना जवाब अपडेट कर लिया है। –

+0

उद्धरण विंडोज़ पर मायने रखता है और अगर आप तर्क के लिए सिंगल कोट्स का उपयोग करते हैं तो एक त्रुटि देगी: '" प्रीइंस्टॉल करें ":" नोड-ई \ "अगर (process.env.npm_execpath.indexOf ('yarn') == = -1) नई त्रुटि फेंक दें ('आपको स्थापित करने के लिए यार्न का उपयोग करना चाहिए, न कि एनपीएम') \ "" – Thomas

1

आप इसे प्राप्त करने के लिए preinstall हुक के साथ कुछ खोल स्क्रिप्ट के साथ उपयोग कर सकते हैं।

नमूना package.json:

"scripts": { 
    "preinstall": "pgrep npm && exit 1" 
    } 
+0

यह ओएसएक्स पर मेरे लिए काम नहीं करता क्योंकि यह झूठी सकारात्मकता उत्पन्न करता है। उदाहरण के लिए, टर्मिनल में सीधे 'pgrep npm' चलाना एक प्रक्रिया आईडी देता है क्योंकि मेरे पास एक सर्वर चल रहा है जो एक एनपीएम स्क्रिप्ट के साथ शुरू किया गया था। –

2

अन्य उत्तरों की तरह, मैं preinstall script का उपयोग करने और अपने पर्यावरण की जांच करने की सलाह दूंगा। एक पोर्टेबल समाधान के लिए यदि कोई अन्य एनपीएम प्रक्रिया चलती है, तो node -e 'JS_CODE' का उपयोग करना सबसे अच्छा विकल्प है, तो झूठी-सकारात्मक नहीं होगी।

कि जे एस कोड में, आप पैकेज प्रबंधक के पथ की जांच निम्नलिखित का उपयोग कर सकते हैं:

process.env.npm_execpath 

यार्न के द्विआधारी yarn.jsnpm-cli.js NPM द्वारा इस्तेमाल किया की तुलना में है। हम यह जांचने के लिए निम्न की तरह एक regex का उपयोग कर सकते हैं कि यह स्ट्रिंग yarn.js के साथ समाप्त होती है।

/yarn\.js$/ 

इस regex उपयोग करके, हम यकीन है कि यह गलती से कहीं पहले फाइल सिस्टम में मेल नहीं खाएगी हो सकता है। सबसे अधिक संभावना yarn फ़ाइल पथ में प्रकट नहीं होगा, लेकिन आप कभी भी सुनिश्चित नहीं हो सकते हैं।

npm install --ignore-scripts 
1

मैंने:

{ 
    "name": "test", 
    "version": "1.0.0", 
    "scripts": { 
    "preinstall": "node -e 'if(!/yarn\\.js$/.test(process.env.npm_execpath))throw new Error(\"Use yarn\")'" 
    } 
} 

बेशक, उपयोगकर्ता अभी भी संपादन JSON या --ignore-scripts विकल्पों का उपयोग किया इस चेक के आसपास प्राप्त करने में सक्षम हो जाएगा:

यहाँ एक न्यूनतम उदाहरण है बस एक मॉड्यूल जारी किया जिसमें इसके लिए एक सीएलआई शामिल है (एनपीएम preinstall स्क्रिप्ट के लिए उपयोगी): https://github.com/adjohnson916/use-yarn

इसके अलावा, मैंने अभी भी एक हेल जारी किया है https://github.com/adjohnson916/danger-yarn-lock

भी देखें यहाँ चर्चा: Danger के लिए प्रति सीआई पर yarn.lock परिवर्तन लापता के लिए जाँच करने

संबंधित मुद्दे