2012-11-30 16 views
67

मैंने थोड़ी देर के लिए कॉफ़ीस्क्रिप्ट का उपयोग किया है। अब मुझे एक एनपीएम पैकेज लिखना है, क्या मैं इसे कॉफ़ीस्क्रिप्ट में लिख सकता हूं, या मुझे जावास्क्रिप्ट में कॉफ़ीस्क्रिप्ट को संकलित करना चाहिए?क्या मैं कॉफ़ीस्क्रिप्ट में एनपीएम पैकेज लिख सकता हूं?

+1

यह भी देखें: http://stackoverflow.com/questions/26196595/how-do-i-compile-coffeescript-before-publishing-to-npm –

उत्तर

99

मैं यह सुझाव देने जा रहा हूं कि आप अपना पैकेज कॉफ़ीस्क्रिप्ट में लिखते हैं, लेकिन इसे केवल जावास्क्रिप्ट में प्रकाशित करते हैं। मैं इसे इस तरह कार्य करें:

  • coffeescript कोड में src
  • कोड चला जाता है lib
  • src को संकलित किया गया है मेरे Git रेपो के लिए प्रतिबद्ध है, lib मेरी .gitignore
  • lib में है NPM को प्रकाशित किया जाता है, src में मेरी .npmignore
  • coffee-script पैकेज मेरी devDependencies
  • में है

आप प्रेरणा के लिए, मेरा, refix का एक सरल पैकेज पर एक नज़र ले जा सकते हैं:

+24

मैं आपके पैकेज में एक 'प्रीबिलिश' कार्य को परिभाषित कर दूंगा आपके कॉफ़ीस्क्रिप्ट को संकलित करने वाला .json आपके प्रकाशन से पहले इसे स्वचालित करने का एक आसान तरीका है - क्योंकि हम सभी कभी-कभी संकलन करना भूल जाते हैं। अधिक जानकारी के लिए एनपीएम 'स्क्रिप्ट्स' दस्तावेज़ देखें: https://npmjs.org/doc/scripts.html – smithclay

+10

जिस बिंदु से मैं असहमत हूं, वह lib फ़ोल्डर को '.gitignore' में रख रहा है। Lib फ़ोल्डर को गिट में रखने के लिए बहुत आसान है ताकि लोग आपके पैकेज को गिट यूआरएल के माध्यम से संदर्भित कर सकें। – ghempton

+4

यदि आपके पास एक पोस्टइंस्टॉल कार्य है जो आपके कॉफ़ीस्क्रिप्ट को संकलित करता है तो आपको अपने जीआईटी रिपोजिटरी में 'lib/'में .js में जांच करने की आवश्यकता नहीं है, और लिनस यहां सुझाए गए अनुसार इसे अनदेखा करने के लिए सुरक्षित रूप से जोड़ सकता है। देखें - https://github.com/ilkosta/static-jade-brunch उदाहरण के लिए कि आप उन हुकों का उपयोग कैसे कर सकते हैं (साथ ही साथ आप कैसे संभवतः कॉफ़ीस्क्रिप्ट के वैश्विक इंस्टॉल से बच सकते हैं) –

1

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

युक्ति: विकास के दौरान फ़ाइल को देखने और सहेजने के लिए फ़ाइल देखने के लिए coffee -cw yourfile.coffee (कमांड लाइन) का उपयोग करें।

10

आप coffeescript में NPM मॉड्यूल लिख सकते हैं, लेकिन आदेश में जेएस उपयोगकर्ताओं द्वारा उपयोग करने योग्य होने के लिए उन्हें एनपीएम पर प्रकाशित करने से पहले जेएस को संकलित किया जाना चाहिए।

package.json अपने prepublish स्क्रिप्ट हुक के साथ यह आसान बनाता है जो प्रकाशित करने से पहले निर्दिष्ट स्क्रिप्ट चलाता है। zombie.js

https://github.com/assaf/zombie/blob/master/package.json#L16

0

में एक 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 की जाँच करें।

+0

आपके विशिष्ट उदाहरण के लिए, exec का उपयोग करने की कोई आवश्यकता नहीं है। आप आवश्यकता ('कॉफी-स्क्रिप्ट/रजिस्टर') का उपयोग कर सकते हैं, यह एक वैश्विक हैंडलर पंजीकृत करता है जिसके लिए स्वचालित रूप से किसी भी कॉफी निर्भरता को संकलित करता है। हाउवर जो लाइब्रेरी के लिए एक अच्छा अभ्यास नहीं है क्योंकि वैश्विक कॉफी-स्क्रिप्ट अन्य संस्करणों के साथ संघर्ष कर सकती है – Diego

+1

पिछला उदाहरण बन जाता है: आवश्यक ('coffe-script/register'); var howl = आवश्यकता ('./ howl'); – Diego

+0

अच्छा बिंदु डिएगो। उस पर कुछ और अधिक विस्तार: 'कॉफी स्क्रिप्ट/register' [require.extensions] (http://nodejs.org/docs/latest/api/globals.html#globals_require_extensions) जिसका बहिष्कार किया जाता है पर निर्भर करता है। nodejs.org के अनुसार: * "जब से मॉड्यूल प्रणाली लॉक होता है, इस सुविधा शायद कभी नहीं दूर जाना होगा हालांकि, यह सूक्ष्म कीड़े और जटिलताओं है कि सबसे अच्छा अछूता छोड़ दिया जाता है हो सकता है।।" * सुविधा संभावना नहीं कॉफी से निकाले जाने का [है स्वयं] (https://github.com/jashkenas/coffeescript/issues/3692), लेकिन मेरी राय में बहिष्करण स्पष्ट करने के लिए एक अच्छा कारण है। – joshuarh

0

अपने मॉड्यूल का एक बहुत उनके 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 इससे पहले कि वे अपने मॉड्यूल स्थापित कर सकते हैं करना चाहिए कि है।