2016-08-19 13 views
6

क्या मैं प्रकाशित होने पर अपने Node.js npm पैकेज की मूल निर्देशिका को बदलना संभव है? क्या मैं निम्नलिखित है:एनपीएम पर रूट निर्देशिका बदलें

├── lib 
├── package.json 
├── .npmignore 
├── src 
│   ├── index.js 
│   └── sub 
│    └── mymodule.js 
└── test 

/src मेरे ES2015 स्रोत कोड के सभी है। मैं Babel के साथ /lib निर्देशिका में ट्रांसफर करता हूं। main मेरे package.json अंक lib/index.js में। इसके बाद मैं npm publish (मेरा .npmignoresrc पर सेट कर सकता हूं, इसलिए केवल lib प्रकाशित किया जाएगा)। अब मेरा पैकेज npmjs.com पर तैनात है और दूसरे पैकेज में मैं इसे import index from 'mypackage' के साथ आयात कर सकता हूं।

अभी तक इतना अच्छा है। लेकिन अगर मैं सीधे sub/mymodule.js आयात करना चाहता हूं तो क्या होगा? मुझे import mymodule from 'mypackage/lib/sub/mymodule' लिखना है। मैं वास्तव में क्या चाहता हूं import mymodule from 'mypackage/sub/mymodule' बिना /lib/ मेरे पथ में।

मैं इसे कैसे प्राप्त कर सकता हूं? एनपीएम दस्तावेज ने directories.lib का उल्लेख किया है कि मैं package.json में सेट कर सकता हूं लेकिन ऐसा लगता है कि इसे पूरी तरह अनदेखा कर दिया जाएगा। मैंने इसे ./lib पर सेट किया लेकिन यह कुछ भी नहीं करता है।

उत्तर

2

आप npm publish lib के साथ अपनी /lib निर्देशिका प्रकाशित कर सकते हैं। प्रकाशित करने से पहले अपनी पैकेज.जेसन फ़ाइल को lib निर्देशिका में कॉपी करना याद रखें।

एक सुझाव NPM स्क्रिप्ट का उपयोग करने के लिए है:

"scripts": { "build": "babel src --out-dir lib", "prepublish": "npm run build && cp ./package.json lib" }

+2

हां, धन्यवाद, लेकिन इसके लिए यह बहुत बदसूरत और त्रुटि-प्रवण कार्यवाही है क्योंकि आपको उस निर्देशिका से 'lib' में सीडी करना है और 'npm प्रकाशित करना' है। कल्पना कीजिए कि आप उस चरण को भूल गए हैं जो आपकी परियोजना की मूल निर्देशिका से गलती से 'एनपीएम प्रकाशित' करता है। आप एक पुस्तकालय में खत्म हो जाते हैं जो अब काम नहीं करता है। – LongFlick

+1

मैं आज इस टिप्पणी में आया और यह पता लगाया कि आप 'package.json' में 'निजी: सत्य' सेट कर सकते हैं, जो सभी प्रकाशित प्रयासों को रोकता है। फिर अपनी '/ lib' निर्देशिका में,' package.json' की प्रतिलिपि करते समय 'निजी: सत्य' को grep करना सुनिश्चित करें, यह आपको केवल आपकी तैयार निर्देशिका में प्रकाशित करने के लिए सीमित करता है। – Javran

2

मैं भी बिल्कुल वैसा ही दर्द का सामना कर दिया गया है। चारों ओर खेलने का एक बहुत बाद मैं एक जवाब इस पोस्ट में एक के आधार पर के साथ समाप्त हो गया:

"scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1", 
    "lint": "eslint src/**", 
    "build": "rm -rf ./lib/* && babel src -d lib -s && cp ./package.json lib", 
    "prepublish": "[[ \"$PWD\" =~ YOUR_DIR_HERE/lib ]]", 
    "pub": "pushd ./ && npm run build && cd lib && npm publish && popd" 
} 

इसका मतलब यह है कि एक "NPM प्रकाशित" जब lib dir जो गलत तैनाती होने से बचाता है में नहीं असफल हो जायेगी। मैं एक कस्टम "एनपीएम रन पब" का उपयोग करने के लिए उत्सुक नहीं हूं लेकिन यह सबसे अच्छा समाधान है जिसे मैं अभी तक आने में सक्षम हूं।

+0

उघ - मैं इस से बेहतर जवाब खोजने की उम्मीद कर रहा था। मैं वही कर रहा हूँ। मैं वास्तव में "एनपीएम प्रकाशित" में असफल नहीं हूं अगर मैं इसे क्ली से हाथ से कर रहा हूं, लेकिन समस्या यह है कि अब हमारे पास हमारे सभी बिल्ड टूल्स के लिए एक विशेष मामला है जो स्वचालित रूप से प्रकाशित होता है। अब मैं यह नहीं मान सकता कि "एनपीएम प्रकाशित" यह है कि आप एक पैकेज कैसे प्रकाशित करते हैं। –

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