मैंने थोड़ी देर के लिए कॉफ़ीस्क्रिप्ट का उपयोग किया है। अब मुझे एक एनपीएम पैकेज लिखना है, क्या मैं इसे कॉफ़ीस्क्रिप्ट में लिख सकता हूं, या मुझे जावास्क्रिप्ट में कॉफ़ीस्क्रिप्ट को संकलित करना चाहिए?क्या मैं कॉफ़ीस्क्रिप्ट में एनपीएम पैकेज लिख सकता हूं?
उत्तर
मैं यह सुझाव देने जा रहा हूं कि आप अपना पैकेज कॉफ़ीस्क्रिप्ट में लिखते हैं, लेकिन इसे केवल जावास्क्रिप्ट में प्रकाशित करते हैं। मैं इसे इस तरह कार्य करें:
- coffeescript कोड में
src
- कोड चला जाता है
lib
src
को संकलित किया गया है मेरे Git रेपो के लिए प्रतिबद्ध है,lib
मेरी.gitignore
lib
में है NPM को प्रकाशित किया जाता है,src
में मेरी.npmignore
coffee-script
पैकेज मेरीdevDependencies
में है
आप प्रेरणा के लिए, मेरा, refix का एक सरल पैकेज पर एक नज़र ले जा सकते हैं:
- https://github.com/linus/refix
npm install refix
मैं आपके पैकेज में एक 'प्रीबिलिश' कार्य को परिभाषित कर दूंगा आपके कॉफ़ीस्क्रिप्ट को संकलित करने वाला .json आपके प्रकाशन से पहले इसे स्वचालित करने का एक आसान तरीका है - क्योंकि हम सभी कभी-कभी संकलन करना भूल जाते हैं। अधिक जानकारी के लिए एनपीएम 'स्क्रिप्ट्स' दस्तावेज़ देखें: https://npmjs.org/doc/scripts.html – smithclay
जिस बिंदु से मैं असहमत हूं, वह lib फ़ोल्डर को '.gitignore' में रख रहा है। Lib फ़ोल्डर को गिट में रखने के लिए बहुत आसान है ताकि लोग आपके पैकेज को गिट यूआरएल के माध्यम से संदर्भित कर सकें। – ghempton
यदि आपके पास एक पोस्टइंस्टॉल कार्य है जो आपके कॉफ़ीस्क्रिप्ट को संकलित करता है तो आपको अपने जीआईटी रिपोजिटरी में 'lib/'में .js में जांच करने की आवश्यकता नहीं है, और लिनस यहां सुझाए गए अनुसार इसे अनदेखा करने के लिए सुरक्षित रूप से जोड़ सकता है। देखें - https://github.com/ilkosta/static-jade-brunch उदाहरण के लिए कि आप उन हुकों का उपयोग कैसे कर सकते हैं (साथ ही साथ आप कैसे संभवतः कॉफ़ीस्क्रिप्ट के वैश्विक इंस्टॉल से बच सकते हैं) –
मैंने कॉफीस्क्रिप्ट में स्क्रैच से एनपीएम पैकेज लिखे हैं। मैं आपको नोड के साथ-साथ ब्राउज़र के लिए कॉफ़ीस्क्रिप्ट का उपयोग करने के लिए प्रोत्साहित करता हूं। हालांकि, इससे पहले कि आप अपने मॉड्यूल का उपयोग या प्रकाशन कर सकें, आपको स्रोत कॉफीस्क्रिप्ट को जावास्क्रिप्ट में संकलित करना होगा। हालांकि, आपको कॉफीस्क्रिप्ट का उपयोग करने से वापस नहीं रोकना चाहिए।
युक्ति: विकास के दौरान फ़ाइल को देखने और सहेजने के लिए फ़ाइल देखने के लिए coffee -cw yourfile.coffee
(कमांड लाइन) का उपयोग करें।
आप coffeescript में NPM मॉड्यूल लिख सकते हैं, लेकिन आदेश में जेएस उपयोगकर्ताओं द्वारा उपयोग करने योग्य होने के लिए उन्हें एनपीएम पर प्रकाशित करने से पहले जेएस को संकलित किया जाना चाहिए।
package.json
अपने prepublish
स्क्रिप्ट हुक के साथ यह आसान बनाता है जो प्रकाशित करने से पहले निर्दिष्ट स्क्रिप्ट चलाता है। zombie.js
https://github.com/assaf/zombie/blob/master/package.json#L16
में एक prepublish
NPM हुक उसके बारे में यहां एक उदाहरण जबकि मुझे यकीन है कि अगर यह सबसे अच्छा तरीका है नहीं कर रहा हूँ, तकनीकी रूप से यह संभव ज्यादातर CoffeeScript में अपने पैकेज लिखने के लिए है।
मूल रूप से, आप एक जे एस फ़ाइल कि बस coffee
आदेश लपेटता लिख सकते हैं तो जैसे:
bin/howl.coffee
console.log 'Awwwooooo!'
bin/howl.js
#!/usr/bin/env node
var path = require('path');
var exec = require('child_process').exec;
var coffee = path.resolve(__dirname, '../node_modules/coffee-script/bin/coffee');
var howl = path.resolve(__dirname, './howl.coffee');
var command = coffee + ' ' + howl;
exec(command, function(error, stdout) {
if (error) { throw error };
console.log(stdout);
});
node howl.js
चल रहा है (या बस howl
जब यह वैश्विक स्तर पर स्थापित है) अब Awwooooo!
आउटपुट करेगा।आप require
जैसी अन्य कॉफीस्क्रिप्ट फाइलें और जावास्क्रिप्ट "रैपर" से कॉफीस्क्रिप्ट में उन्हें पास करके तर्कों का उपयोग कर सकते हैं।
वैसे भी, वहाँ कारणों यह करने के लिए नहीं हो सकता है, लेकिन यह मेरे लिए अब तक काम किया है तो लगा मैं एक अतिरिक्त परिप्रेक्ष्य के लिए इस प्रस्तुत चाहते हैं।
इस तकनीक का इस्तेमाल एक सरल उदाहरण परियोजना के लिए, https://www.github.com/joshuabc/packdown की जाँच करें।
आपके विशिष्ट उदाहरण के लिए, exec का उपयोग करने की कोई आवश्यकता नहीं है। आप आवश्यकता ('कॉफी-स्क्रिप्ट/रजिस्टर') का उपयोग कर सकते हैं, यह एक वैश्विक हैंडलर पंजीकृत करता है जिसके लिए स्वचालित रूप से किसी भी कॉफी निर्भरता को संकलित करता है। हाउवर जो लाइब्रेरी के लिए एक अच्छा अभ्यास नहीं है क्योंकि वैश्विक कॉफी-स्क्रिप्ट अन्य संस्करणों के साथ संघर्ष कर सकती है – Diego
पिछला उदाहरण बन जाता है: आवश्यक ('coffe-script/register'); var howl = आवश्यकता ('./ howl'); – Diego
अच्छा बिंदु डिएगो। उस पर कुछ और अधिक विस्तार: 'कॉफी स्क्रिप्ट/register' [require.extensions] (http://nodejs.org/docs/latest/api/globals.html#globals_require_extensions) जिसका बहिष्कार किया जाता है पर निर्भर करता है। nodejs.org के अनुसार: * "जब से मॉड्यूल प्रणाली लॉक होता है, इस सुविधा शायद कभी नहीं दूर जाना होगा हालांकि, यह सूक्ष्म कीड़े और जटिलताओं है कि सबसे अच्छा अछूता छोड़ दिया जाता है हो सकता है।।" * सुविधा संभावना नहीं कॉफी से निकाले जाने का [है स्वयं] (https://github.com/jashkenas/coffeescript/issues/3692), लेकिन मेरी राय में बहिष्करण स्पष्ट करने के लिए एक अच्छा कारण है। – joshuarh
अपने मॉड्यूल का एक बहुत उनके devDependencies
में coffee-script
है, तो यह सिर्फ विश्व स्तर पर coffee-script
स्थापित करने के लिए के बजाय प्रत्येक मॉड्यूल (जो बहुत लंबे समय तक ले जाता है) के लिए इसे स्थापित उपयोगी है।
coffee-buildcoffee-script
के लिए एक वैश्विक संस्करण प्रबंधक है।
बस अपने package.json
करने के लिए इन 2 लिपियों जोड़ें:
{
"name": "my-coffee-module",
"scripts": {
"build": "coffee-build -v 1.11.x -b -o js src",
"postinstall": "npm run build"
}
}
सूचना कैसे -v 1.11.x
एक सटीक संस्करण है, जो निहित उन्नयन की अनुमति देता है नहीं है।
केवल पतन उपयोगकर्ताओं npm install -g coffee-build
इससे पहले कि वे अपने मॉड्यूल स्थापित कर सकते हैं करना चाहिए कि है।
यह भी देखें: http://stackoverflow.com/questions/26196595/how-do-i-compile-coffeescript-before-publishing-to-npm –