2016-03-29 40 views
18

मैं एक सहकर्मी से कुछ कोड देख रहा हूं और वह @ प्रतीक का उपयोग बयान में उपयोग कर रही है।नोड मॉड्यूल नामों में @ प्रतीक का उपयोग

Error: Cannot find module '@company/config'

कौन सा मैं स्पष्ट रूप से उम्मीद करते हैं, वहाँ कुछ भी नहीं है कि में इस तरह दिखता है:

var restServer = require('@company/config') 

मुझे इस कोड को चलाने के लिए प्रयास करते हैं, मैं कोई त्रुटि मिलती है: यह इन फ़ाइलों में से एक की पहली पंक्ति है पहचानने की आवश्यकता के लिए मेरी निर्देशिका! ऐसा लगता है कि यहां कुछ जादू चल रहा है, जिसे मैं नफरत करता हूं।

मुझे लगता है कि यह कुछ अस्पष्ट एनपीएम या नोड चाल है जिसे मैं प्रकट नहीं किया गया है, या हो सकता है कि कॉन्फ़िगरेशन की कुछ अन्य अंधेरी कला है जो मुझे नहीं मिल रही है। किसी भी जानकारी की सराहना की, भले ही यह केवल एक स्पष्टीकरण है कि @ आवश्यकता के साथ काम करता है।

अन्य विचार: शेफ इस पूरी चीज़ में कहीं भी शामिल है, ताकि यह प्रासंगिक हो।

अद्यतन: 99% इस खास तरह से इस बिंदु पर npm config काम करता है, लेकिन अभी भी यह कैसे तय करने के बारे में जाने के लिए के बारे में अनिश्चित के साथ एक मुद्दा है।

Update2 कुछ सामान मैं पर्दाफाश के आधार पर:

Dereks-MacBook-Pro:project-dir derekjanni$ npm config set //registry.npmjs.org/:authtoken $SECRET_TOKEN 

Dereks-MacBook-Pro:project-dir derekjanni$ npm install 
npm ERR! Darwin 15.0.0 
npm ERR! argv "/usr/local/Cellar/node/5.5.0/bin/node" "/usr/local/bin/npm" "install" 
npm ERR! node v5.5.0 
npm ERR! npm v3.5.3 
npm ERR! code E404 
npm ERR! 404 Not found : @company/config 
npm ERR! 404 '@company/config' is not in the npm registry. 
+3

एक दायरे वाला रजिस्ट्री के लिए एक गुंजाइश के साथ एसोसिएट एक ऑपरेशन: https://docs.npmjs.com/misc/scope

डॉक्स की आवश्यकता होती है scoped पैकेज पर अतिरिक्त जानकारी शामिल । पहली बार किसी निजी रजिस्ट्री में लॉग इन करते समय उपयोगी: npm लॉगिन --scope = @ organization --registry = policy.organization.com, जो @ संगठनात्मकता को रजिस्ट्री में मैप किए जाने के कारण रजिस्ट्री में मैप किया जाएगा पैटर्न @ संगठन/पैकेज। Https://docs.npmjs.com/misc/config –

उत्तर

7

इसलिए मैंने इसे स्वयं हल किया।

बाहर कर देता है @company/config हमारे निजी NPM खजाने में से एक, NPM पर होस्ट और एक आंतरिक GitHub भंडार को यह उर्फ ​​द्वारा परिभाषित किया गया है: यह कैसे काम करता है require कोई लेना देना नहीं था।

@ का उपयोग करना प्रोटोकॉल हो सकता है या नहीं हो सकता है कि मैं निजी एनपीएम रिपोज़ के बारे में अनजान था, अगर आप इसमें भाग लेते हैं तो इसे ध्यान में रखें।

2

जब आप require() फोन यह एक मार्ग पढ़ता है। चूंकि कोई फ़ोल्डर नहीं है यदि आप @company के रूप में किसी फ़ोल्डर को नाम देते हैं, तो आपको @ के साथ कुछ की आवश्यकता होनी चाहिए।

आपका सहकर्मी खुद के लिए @company/config.js रखना चाहता था क्योंकि विन्यास आमतौर पर व्यक्तिगत होते हैं और किसी अन्य उपयोगकर्ता के लिए समान नहीं हो सकते हैं।

require एक विस्तार के साथ अपनी परियोजना फ़ोल्डर के अंदर फाइल को फोन करेगा,:

  • आप अपने प्रोजेक्ट फ़ोल्डर के अंदर फाइलों को कॉल करते हैं आप अपने मार्ग के सामने ./ जोड़ना होगा।
  • यदि आप http या npm मॉड्यूल (जो node_modules पर स्थापित हैं) के किसी भी वैश्विक पैकेज को कॉल करते हैं, तो आप ./ को छोड़ सकते हैं।

मैंने अपने परीक्षण प्रोजेक्ट फ़ोल्डर के अंदर @company/config मार्ग बनाया। यह केवल मुझे ./@company/config का उपयोग करने की आवश्यकता है। केवल तभी जब मैंने node_modules के अंदर फ़ोल्डर को स्थानांतरित किया, तो मुझे require('@company/config'); पर अनुमति दी गई।

मैं node_modules के अंदर कोई मॉड्यूल डालने की अनुशंसा नहीं करता, यह npm पैकेज के लिए सिर्फ 'कंटेनर' है। एक नई कॉन्फ़िगरेशन फ़ाइल बनाने का प्रयास करें और आवश्यक मार्ग बदलें या बस अपनी मुख्य फ़ाइल में आवश्यकताएं हटाएं और कॉन्फ़िगर करें।

+0

से धन्यवाद! कुछ उपयोगी के साथ यह एक अच्छा जवाब है, लेकिन मैंने वास्तव में कुछ समय पहले अपनी समस्या हल की थी। मैं इसे अन्य सवालों के जवाब देने के लिए पोस्ट करूंगा। –

12
NPM में

scoped संकुल एक '@' प्रतीक से पहले कर रहे हैं: https://docs.npmjs.com/misc/scope#requiring-scoped-packages

Requiring scoped packages

Because scoped packages are installed into a scope folder, you have to include the name of the scope when requiring them in your code, e.g.

require('@myorg/mypackage') 

There is nothing special about the way Node treats scope folders, this is just specifying to require the module mypackage in the folder called @myorg.

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