2012-03-11 24 views
13

मेरे पास एक ऐप है जिसे मैं नोडजित्सु में तैनात कर रहा हूं। हाल ही में, वे एनपीएम मुद्दों से पीड़ित हुए जिसके कारण मैंने अपने ऐप को फिर से शुरू करने की कोशिश करने के बाद कई घंटे तक ऑफलाइन होने का कारण बना दिया, क्योंकि इसकी निर्भरता स्थापित नहीं की जा सकी। मुझे बताया गया था कि मेरे पैकेज.जेसन में मेरी सभी निर्भरताओं को bundledDependencies के रूप में सूचीबद्ध करके भविष्य में इसे बदला जा सकता है, जिससे निर्भरता को शेष एप्लिकेशन के साथ अपलोड किया जा सकता है।क्या बंडल निर्भरता सूची स्वचालित रूप से उत्पन्न करने का कोई तरीका है?

"dependencies": { 
    "express": "2.5.8", 
    "mongoose": "2.5.9", 
    "stylus": "0.24.0" 
}, 
"bundledDependencies": [ 
    "express", 
    "mongoose", 
    "stylus" 
] 

अब, सूखी आधार पर, इस अनाकर्षक है: कौन सा है कि मैं अपने package.json जरूरत है कुछ इस तरह देखने के लिए मायने रखता है। लेकिन रखरखाव क्या बदतर है: हर बार जब मैं निर्भरता को जोड़ता या निकालता हूं, तो मुझे दो स्थानों में बदलाव करना पड़ता है। क्या bundledDependenciesdependencies के साथ सिंक करने के लिए मैं एक कमांड का उपयोग कर सकता हूं?

+0

पिंग :) क्या यह आपके प्रश्न का उत्तर देता है या हल करने के लिए कुछ और है? – wprl

उत्तर

10

इसे करने के लिए grunt.js कार्य को कार्यान्वित करने के बारे में कैसे? यह काम करता है:

module.exports = function(grunt) { 

    grunt.registerTask('bundle', 'A task that bundles all dependencies.', function() { 
    // "package" is a reserved word so it's abbreviated to "pkg" 
    var pkg = grunt.file.readJSON('./package.json'); 
    // set the bundled dependencies to the keys of the dependencies property 
    pkg.bundledDependencies = Object.keys(pkg.dependencies); 
    // write back to package.json and indent with two spaces 
    grunt.file.write('./package.json', JSON.stringify(pkg, undefined, ' ')); 
    }); 

}; 

रखो कि grunt.js नामक एक फाइल में अपनी परियोजना के रूट निर्देशिका में। गड़बड़ी स्थापित करने के लिए, एनपीएम का प्रयोग करें: npm install -g grunt। फिर grunt bundle निष्पादित करके संकुल को बंडल करें।

एक commentor एक NPM मॉड्यूल है कि उपयोगी हो सकता है उल्लेख किया: (। मैं इसे करने की कोशिश नहीं की है) https://www.npmjs.com/package/grunt-bundled-dependencies

+0

ने अपना उत्तर लिया और लाइब्रेरी बनाई .. https://github.com/GuyMograbi/grunt-bundled- निर्भरताएं। कृपया अपने उत्तर में जोड़ने पर विचार करें। –

0

आप पढ़ सकते हैं और bundleDependencies संपत्ति को अद्यतन करने और NPM के माध्यम से इसे चलाने के लिए एक सरल Node.js स्क्रिप्ट का उपयोग कर सकते हैं जीवन चक्र हुक/स्क्रिप्ट्स।

मेरे फ़ोल्डर संरचना है:

  • scripts/update-bundle-dependencies.js
  • package.json

scripts/update-bundle-dependencies.js:

#!/usr/bin/env node 
const fs = require('fs'); 
const path = require('path');  
const pkgPath = path.resolve(__dirname, "../package.json"); 
const pkg = require(pkgPath); 
pkg.bundleDependencies = Object.keys(pkg.dependencies);  
const newPkgContents = JSON.stringify(pkg, null, 2);  
fs.writeFileSync(pkgPath, newPkgContents); 
console.log("Updated bundleDependencies"); 

आप npm के नवीनतम संस्करण (> 4.0.0) का उपयोग कर रहे हैं, तो , आपका उपयोग कर सकते हैंया prepack स्क्रिप्ट: https://docs.npmjs.com/misc/scripts

prepublishOnly: दिखाए जाने से पहले पैकेज तैयार किया और पैक किया जाता है, केवल पर NPM को प्रकाशित करें। (नीचे देखें।)

prepack: एक टारबॉल से पहले चलाने पैक किया जाता है (NPM पैक पर, NPM प्रकाशित करें, और जब Git निर्भरता स्थापित करने)

package.json:

{ 
    "scripts": { 
    "prepack": "npm run update-bundle-dependencies", 
    "update-bundle-dependencies": "node scripts/update-bundle-dependencies" 
    } 
} 

परीक्षण कर सकते हैं npm run update-bundle-dependencies चलाकर इसे स्वयं करें।

आशा है कि इससे मदद मिलती है!