Npm स्क्रिप्ट के लिए वर्किंग डायरेक्टरी बदलें


82

प्रश्न: क्या उस संदर्भ को बदलना संभव है जिसमें npm स्क्रिप्ट चलाता है?

मैं निम्नलिखित क्या करना चाहता हूं:

"scripts": {
   "test": "gulp mocha",
   "pre-install": "./deps/2.7/cpython/configure --prefix=$(pwd)/build --exec-prefix=$(pwd)/build && make -C deps/2.7/cpython && make -C deps/2.7/cpython install",
   "install": "node-gyp rebuild"
},

जाहिर है cd deps/2.7/cpython/ && ./configureUNIX जैसी प्रणालियों पर काम करेगा, लेकिन खिड़कियों पर नहीं।

क्यों: समस्या की जड़ यह है, कि configureअजगर रेपो की कमांड फाइलों को उस निर्देशिका में आउटपुट करती है, जहां इसे कहा जाता है। हालाँकि, फ़ाइलों के लिए प्रासंगिक बना रहे हैं makeऔर make installजो रेपो की निर्देशिका में फ़ाइलों के लिए देखो।

इस मामले में मैं बदल नहीं सकता Makefileक्योंकि पायथन की निर्माण प्रक्रिया काफी जटिल है।

वैकल्पिक: विकल्प शायद कुछ लिखने install.jsऔर नोड के ओएस स्वतंत्र एपीआई और कुछ का उपयोग करने के लिए है child_process.exec(), जो मैं शायद करने वाला हूं। हालाँकि, npm को छोड़ना वास्तव में अच्छा नहीं होगा।


1
मेरा मानना ​​है कि एक अतिरिक्त स्क्रिप्ट लिखने और npm से एक को चलाने के बारे में कुछ भी गलत नहीं है।
वेबडुवेट

2
cd deps/2.7/cpython/ && ./configureविंडोज पर काम करना चाहिए - आपको क्या समस्या है?
रिचर्ड विलियम्स

कई। आप उपयोग नहीं कर सकते ./configure --prefix=$(pwd)/somepath। यह सुंदर नहीं है। मुझे यह अभी तक नहीं मिला है, लेकिन npmसंभवतः उपयोग कर रहा है var spawn = require('child_process').spawn, जो आपको विकल्प सेट करने की अनुमति देगा {cwd: pwd + 'somepath'}, लेकिन इसे उजागर नहीं कर रहा है। यह दर्शन के रूप में अच्छी तरह से है: पैकेज प्रबंधन में कार्यक्षमता का भार होता है जो उनके पास सामान्य रूप से बिल्ड टूल के साथ होता है। यदि वे इस सड़क पर जाते हैं, तो उन्हें इस तरह की कुछ विशेषताओं की आवश्यकता है।
eljefedelrodeodeljefe

2
मैंने इसे काफी बड़े पैमाने पर हल किया है install.js , जो मोटे तौर पर करता है और इसे package.jsonऊपर से कहा जाता है। एपीआई child_processको संभालना इतना आसान नहीं है, हालांकि, क्योंकि यह कड़ी मेहनत से डीबग एरोस के लॉड्स से गुजरता है। मुझे कुछ समय लगा, लेकिन मैं अब खुश हूँ
eljefedelrodeodeljefe

एक पीआर यहाँ
eljefedelrodeodeljefe

जवाबों:


91

npm केवल करने की अनुमति देता है cd dir && command -args , जो विंडोज पर भी चलेगा।

nodeपीआर https://github.com/npm/npm/pull/10958 में स्पॉन कार्यक्षमता का उपयोग करने के लिए बदलाव किया गया है , लेकिन उपरोक्त समाधान के कारण अस्वीकार कर दिया गया था।


1
यकीन नहीं होता कि मैंने कुछ किया है, लेकिन हाल ही में विंडोज में यह ब्रेक था।

6

जैसा कि ऊपर उल्लेखित है:

npm शायद उपयोग कर रहा है

var spawn = require('child_process').spawn

जो आपको विकल्प सेट करने की अनुमति देगा:

    {cwd: pwd + 'somepath'}

लेकिन इसे उजागर नहीं कर रहा है।

मैंने इसे काफी बड़े पैमाने पर हल किया है install.js, जो मोटे तौर पर करता है और इसे package.jsonऊपर से कहा जाता है। एपीआई child_processको संभालना इतना आसान नहीं है, हालांकि, चूंकि यह हार्ड डिबग त्रुटियों को लोड करता है। मुझे कुछ समय लगा, लेकिन मैं अब खुश हूं।


अधिकार। दुर्भाग्य से यह पीआर में खारिज कर दिया गया है जैसा कि मेरे उत्तर में दिया गया है।
एलजेफेडेलरोडोडेलजेफ ने

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