NixOS में npm पैकेज कैसे स्थापित करें?


10

NixOS में, मैंने yarnहमेशा की तरह रन करके पैकेज स्थापित किया $ nix-env -i yarn। अब मैं चलाने का प्रयास कर रहा हूँ yarnके माध्यम से $ yarn start। लेकिन यह मुझे निम्नलिखित त्रुटि की ओर ले जाता है।

$ yarn start
    yarn start v0.20.3
    $ webpack-dev-server --env dev 
    sh: webpack-dev-server: command not found
    error Command failed with exit code 127.

जब मैं webpack-dev-serverअपने सामान्य निक्सओएस तरीके से स्थापित करने की कोशिश करता हूं तो मुझे 'मैच नहीं व्युत्पन्न' त्रुटि मिलती है।

$ nix-env -i webpack-dev-server
error: selector ‘webpack-dev-server’ matches no derivations

मैंने पढ़ा कि webpack-dev-serverयह एक npm पैकेज है, और इस मामले में उस की प्रासंगिकता के बारे में कुछ सवालों के बारे में अनिश्चित हूं।

  1. क्या यह निक्स के तहत एक अलग पैकेज प्रबंधक निक्स का उपयोग करने के लिए समझ में आता है?
  2. यदि उत्तर (1) हां है, तो निक्सन को एनपीएम कैसे स्थापित किया जाए? मैं npm को उपलब्ध नहीं देख रहा हूँ nix-env, जब खोज के माध्यम से उपलब्ध है , साथ $ nix-env -qa npmही कोई व्युत्पन्न नहीं है।

webpack-dev-serverनिक्सोस पर स्थापित करने का सही तरीका क्या है ?


संपादित करें

मैंने टिप्पणी की गई लिंक काwebpack-dev-server पालन करने का प्रयास किया और स्थापित करने में सक्षम था , लेकिन वहां रीडमी में सूचीबद्ध चरण 2 के माध्यम से पालन करने में सक्षम नहीं हूं।node2nix

मैं में चरण 2 में संदर्भित फ़ाइल स्थित /nix/storeपर

/nix/store/sgk7sxgqxrv2axkxjwc3y15apcqbrv1z-nixos-17.03.1482.1b57bf274a/nixos/pkgs/development/node-packages/node-packages.json

सूचीबद्ध npm संकुल को देखने के लिए मैं उस फ़ाइल को खोल सकता हूँ, लेकिन अनुमतियाँ केवल पढ़ने के लिए हैं, यहाँ तक कि sudo के साथ चल रही है - इसलिए मुझे इसे बदलने के लिए अनुमतियों को संपादित करना होगा।

ऐसा लगता है कि मुझे इस /nix/storeफ़ाइल को सीधे संपादित नहीं करना चाहिए और इसके बजाय इसे अप्रत्यक्ष रूप से निक्स के माध्यम से हेरफेर करना चाहिए। क्या मैं सही हूं कि मुझे इस फाइल को सीधे संपादित नहीं करना चाहिए? यदि हां, तो मैं webpack-dev-serverइसे जोड़ने के लिए निक्स या कुछ और का उपयोग करके चरण 2 को कैसे पूरा कर सकता हूं ?



@EmmanuelRosa लिंक के लिए धन्यवाद; मैंने वहां के निर्देशों का पालन करने का प्रयास किया और उस प्रयास के परिणामों के अनुसार इस प्रश्न को अद्यतन किया।
मेर्ज़ल

/nix/storeकेवल पढ़ने के लिए है। आपको git repo को क्लोन करना होगा और कमांड के -I nixpkgs=/path/to/repoलिए उपयोग करना होगाnix-*
wizzup

जवाबों:


15

Npm के माध्यम से npm संकुल का उपयोग करने के कई तरीके हैं:

अपनी निजी परियोजनाओं के लिए, मैं nix-shellतब उपयोग करता हूं, शेल के भीतर मैं npm स्क्रिप्ट का उपयोग करता हूं ताकि npm वैश्विक पैकेज (जैसे gulp) की आवश्यकता को रोका जा सके। प्रक्रिया कुछ इस तरह दिखती है (और शायद यार्न के लिए बहुत समान है):

$ nix-shell -p nodejs-8_x
[nix-shell:yourproject]$ npm install # installs npm deps to project-local node_modules
[nix-shell:yourproject]$ npm exec (...) # using scripts configured in package.json

यह मेरे लिए अच्छी तरह से काम करता है क्योंकि मेरे किसी भी पैकेज में बाइनरी निर्भरता नहीं है। यह पोस्ट आपकी परियोजना के लिए default.nix के निर्माण का वर्णन करती है ताकि आपको निक्स-शेल के हर आह्वान के लिए निर्भरता निर्दिष्ट न करनी पड़े, लेकिन यह वैकल्पिक है।

दूसरा तरीका npm2nix का उपयोग कर रहा है:

node2nix -i node-packages.json # creates ./default.nix
nix-shell # nix-shell will look for a default.nix, which above will have generated

जिसके कारण Nix परियोजना में सभी npm संकुल को प्रबंधित करेगा।

यह निक्स-शेल से परिचित होने के लिए एक अच्छा विचार हो सकता है, क्योंकि आपके निक्स प्रोफाइल (निक्स-एनवी या नोक्स के माध्यम से) में नोड पैकेज / किसी भी निर्भरता को स्थापित करने की कोशिश करने से "वैश्विक" नामवालों को प्रदूषित करके निक्स के उद्देश्य को हराया जाता है।


क्या आप इस संबंध में विस्तार के साथ बाइंडिंग का उपयोग कर सकते हैं। उदाहरण के लिए: github.com/mateogianolio/nblas
CMCDragonkai

1
मुझे पता चला कि यह बाइनरी पैकेज के लिए कैसे करना है। आप की जरूरत है nodePackages_6_x.node-gyp, और किसी भी अन्य पुस्तकालयों की तरह blas, तो जब यह सब एक साथ है, तो आप npm install ....नोड-जिप का उपयोग करने वाले पैकेज का उपयोग कर सकते हैं ।
CMCDragonkai

1
पहले तरीके के बारे में, npm scriptsसमाधान के विकल्प के रूप में , मुझे nix-shellप्रभावी, उदाहरण के लिए वैश्विक एनपीएम पैकेज जोड़ना है nix-shell -p nodejs-8_x nodePackages.grunt-cli। (चेतावनी: निक्सोस और नोड नोब यहाँ।)
रेन एवरेट

पहली बात के बारे में एक बात मुझे समझ में नहीं आती है कि वास्तव में पैकेज को स्वयं कैसे स्थापित किया जाए, यानी प्रोजेक्ट के पैकेज के लिए बाइनरी कहाँ है bin?
रेन एवरेट

@ ryne-everett यदि आप चलाते हैं npm install, तो निष्पादनयोग्य को इसमें जोड़ा जाएगा node_modules/.bin। देखें यहाँ
ल्यूक एडम्स

8

किसी कारण के लिए मुझे पता नहीं है, नोडपैकेज रूट नेमस्पेस में नहीं है और इसका उपयोग करके नहीं पाया जा सकता है nix-env -qa

nix-env -qaPA 'nixos.nodePackages'उपलब्ध पैकेज के लिए सूची का उपयोग करें।

$ nix-env -qaPA 'nixos.nodePackages' | grep -i web
nixos.nodePackages.webdrvr                     node-webdrvr-2.43.0-1
nixos.nodePackages.webpack                     node-webpack-2.6.1

अगर कोई संकुल आप चाहते हैं और आप अपने खुद के, कोशिश यह NixOS पर अनुरोध नहीं कर सकते GitHub


1
मैं सिर्फ निक्स पैकेज मैनेजर का उपयोग कर रहा हूं और इसके साथ काम करने में सक्षम था:nix-env -f '<nixpkgs>' -qaPA nodePackages | grep tern
zaynetro

इनमें से अधिकांश रूट नेमस्पेस में नहीं हैं क्योंकि यह सामान्य खोज को धीमा कर देगा। यह हास्केल पैकेज के साथ भी ऐसा ही है। उनका नाम स्थान बहुत बड़ा है।
user239558

3

एक विकल्प के रूप में, मुझे Nixpkgs मुद्दे # 3393 पर CMCDragonkai की टिप्पणी भी मिली :

मुझे अभी पता चला है कि आप NPM की उपसर्ग निर्देशिका को बदल सकते हैं। कुछ इस तरह:

npm config set prefix '~/mutable_node_modules.

यह आपको एनपीएम की वैश्विक स्थापना का उपयोग करने की अनुमति देता है।

इसलिए शुद्ध रूप से कार्यात्मक मॉडल के आसपास काम करना संभव है, इसके आउटपुट को कहीं न कहीं Nix द्वारा प्रबंधित नहीं किया गया है। लेकिन मुझे लगता है कि यह निक्स के उपयोग के उद्देश्य को हरा देता है। और हर एक सॉफ्टवेयर इन प्रकार के कॉन्फ़िगरेशन परिवर्तनों का समर्थन नहीं करेगा।

फिर भी मुझे लगता है कि nix-env सामान्य वैश्विक नोड पैकेजों का उपयोग करने और विकास पैकेजों के लिए npm के बीच स्विच करने के लिए यह बहुत ही क्लूनी है। मुझे लगता है कि इसीलिए "npm2nix" जैसी सभी पोर्टिंग लेयर्स हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.