"अपनी परियोजना में शामिल करें" का अर्थ है कि फाइलें पैक किए गए टैरबॉल में होंगी जो npm publish
चलाते समय बनाई गई है। वास्तव में प्रकाशन को ट्रिगर किए बिना निरीक्षण के लिए टैरबॉल उत्पन्न करने के लिए आप npm pack
भी चला सकते हैं। इस तरह आप वास्तव में जेनरेट की गई टैरबॉल खोल सकते हैं और निरीक्षण कर सकते हैं कि कौन सी फाइलें/शामिल नहीं थीं।
जबकि .npmignore
(या .gitignore
एक प्रॉक्सी के रूप में, अगर कोई .npmignore
) फ़ाइलों की एक काली सूची के रूप में कार्य की अनदेखी करने (जिससे डिफ़ॉल्ट रूप से सब कुछ शामिल है), files
सरणी एक श्वेत सूची है। यही है, डिफ़ॉल्ट रूप से सब कुछ शामिल करने के बजाय, यदि files
सरणी निर्दिष्ट है तो सब कुछ डिफ़ॉल्ट रूप से बाहर रखा गया है और केवल उन फ़ाइलों को स्पष्ट रूप से सूचीबद्ध किया जाएगा जिन्हें पैक किए गए टैरबॉल में शामिल किया जाएगा।
उदाहरण के तौर पर, कहें कि आपका पैकेज ब्राउज़र में खपत के लिए एक लाइब्रेरी है। आपका कोड lib/
में है, और आप ब्राउज़र-संगत lib में संकलित करने के लिए ब्राउज़र को चलाते हैं dist/index.js
पर। आप .gitignore
में सूचीबद्ध फ़ाइलों के समूह के साथ शुरू करते हैं, जिसका उपयोग defacto .npmignore
के रूप में किया जाता है जो मौजूद नहीं है। लेकिन अब dist/
जेनरेट की गई फाइलों से भरा है, आप उन्हें गिट रेपो से अनदेखा करना चाहते हैं। यदि आप उन्हें .gitignore
पर जोड़ते हैं, तो उन्हें गिट रेपो, से बाहर रखा जाएगा, लेकिन उन्हें पैकेज टैरबॉल से भी अनदेखा कर दिया जाएगा। तो आपके पास दो विकल्प हैं: .gitignore
को .npmignore
के रूप में डुप्लिकेट करें, लेकिन .gitignore
में केवल dist/
सूचीबद्ध करें। यदि आप ऐसा करते हैं, तो आपको सिंक में लगभग दो फाइलें रखना होगा-लेकिन-काफी नहीं। इस तरह से tedius और त्रुटि प्रवण है।
अन्य विकल्प .npmignore
नहीं है, और इसके बजाय files
सरणी में केवल उन फ़ाइलों को सूचीबद्ध करें जिन्हें आप वास्तव में पैकेज में चाहते हैं। README.*
, package.json
, CHANGELOG.*
(शायद कुछ अन्य) स्वचालित रूप से टैरबॉल में शामिल किए जाते हैं। तो आप बस "files": [ "dist" ]
जोड़ें और आप कर चुके हैं।अब आपके पैकेज टैरबॉल में lib
से मूल स्रोत जेएस शामिल नहीं होगा, न ही tests/
आदि, बल्कि इसके बजाय केवल dist/
में वास्तविक संकलित lib शामिल होगा।
directories
का सवाल है, मैं आम तौर पर सूची lib
(es5 के लिए), src
, dist
, test
, output
(ब्राउज़र या वी एम-विशिष्ट बनाता है के लिए) (जैसे अस्थायी उत्पन्न फ़ाइलों के लिए (ES6, coffeescript, टाइपप्रति आदि स्रोतों के लिए) कवरेज रिपोर्ट, आदि), doc
, आदि। हालांकि इस संपत्ति का उपयोग सीधे एनपीएम या अन्य उपकरणों द्वारा नहीं किया जाता है, यह निर्देशिका संरचना को स्पष्ट बनाता है। (बल्कि कई भर से
"scripts": {
"clean": "rm -rf $npm_package_directories_dist $npm_package_directories_output",
"lint": "eslint $npm_package_directories_src",
"test": "teenytest $npm_package_directories_test",
}
इस तरह, निर्देशिका केवल एक बार निर्दिष्ट कर रहे हैं, और अगर वे बदलने के लिए, वे केवल एक ही स्थान में बदल की जरूरत है: इसके अलावा, यह निर्देशिका NPM लिपियों में संदर्भ योग्य तो तरह बना देता है package.json)।
मुझे यकीन नहीं है कि यह क्यों कम किया गया था - क्या कोई इसे ऊपर उठा सकता है, यह एक वैध सवाल है। – Baz