वितरण फ़ाइलों के साथ एक npm पैकेज कैसे प्रकाशित करें?


126

मैं एक npm पैकेज प्रकाशित करना चाहता हूं जिसमें मेरे स्रोत के साथ-साथ वितरण फाइलें भी हैं। मेरे गितुब भंडार में srcफ़ोल्डर है जिसमें जावास्क्रिप्ट स्रोत फाइलें हैं। निर्माण प्रक्रिया distवितरण फ़ाइलों में फ़ोल्डर उत्पन्न करता है। बेशक, distफ़ोल्डर को Github रिपॉजिटरी में चेक नहीं किया गया है।

मैं एक एनपीएम पैकेज को इस तरह से कैसे प्रकाशित करूं कि जब कोई करता है npm install, तो उन्हें फ़ोल्डर के srcरूप में भी मिलता है dist? वर्तमान में जब मैं npm publishअपने गिट रिपॉजिटरी से चलता हूं, तो इसका परिणाम केवल srcफ़ोल्डर में प्रकाशित होता है।

मेरा पैकेज। इस तरह दिखता है:

{
  "name": "join-js",
  "version": "0.0.1",
  "homepage": "https://github.com/archfirst/joinjs",
  "repository": {
    "type": "git",
    "url": "https://github.com/archfirst/joinjs.git"
  },
  "main": "dist/index.js",
  "scripts": {
    "test": "gulp",
    "build": "gulp build",
    "prepublish": "npm run build"
  },
  "dependencies": {
    ...
  },
  "devDependencies": {
    ...
  }
}

जवाबों:


102

Package.json फ़ाइल के "फाइल" फ़ील्ड पर एक नज़र डालें। https://docs.npmjs.com/files/package.json#files

प्रलेखन से:

"फ़ाइलें" फ़ील्ड आपके प्रोजेक्ट में शामिल करने के लिए फ़ाइलों की एक सरणी है। यदि आप किसी फ़ोल्डर को सरणी में नाम देते हैं, तो यह उस फ़ोल्डर के अंदर की फ़ाइलों को भी शामिल करेगा। (जब तक कि उन्हें दूसरे नियम से नजरअंदाज नहीं किया जाएगा।)


3
मुझे यह जानने की उत्सुकता है कि क्या "फाइलें" फ़ील्ड ओवरराइड करती हैं .gitignoreया .npmignore(ऐसा लगता है कि जैसा कि मैंने डॉक्टर को पढ़ा नहीं है) - @ नरेश कृपया हमें बताएं कि किस तरह से ठीक काम किया।
topheman

8
"फाइलें" वास्तव में अनदेखी कर रहा है। मेरे पास अपने .itignore में "dist" है, लेकिन "files" में शामिल है और फ़ोल्डर npm पर प्रकाशित किया जा रहा है। "फाइलें" से प्रतीत होता है कि कितने लोकप्रिय पैकेज जैसे एक्सपेस और ब्लूबर्ड प्रकाशित हो रहे हैं (जबकि अन्य पैकेज हैं जो .npmignore पद्धति का उपयोग करते हैं)। अभी के लिए, मैं "फाइलों" के साथ जा रहा हूं क्योंकि यह कहना है कि क्या प्रकाशित करना है का एक और अधिक सीधा तरीका है। लेकिन कम से कम आज दो बार npm के बारे में मेरा ज्ञान बढ़ाने के लिए आप दोनों को धन्यवाद!
नरेश

3
यह ध्यान देने योग्य है कि यदि "फाइलें" निर्दिष्ट की जाती हैं, तो केवल वे फाइलें ही हैं जो आपकी परियोजना में शामिल हैं (
पैकेज- json

176

जब आपके पास npm publish, यदि आपके पास कोई .npmignoreफ़ाइल नहीं है , तो npm आपकी .gitignoreफ़ाइल का उपयोग करेगा (आपके मामले में आपने distफ़ोल्डर को बाहर रखा है )।

अपनी समस्या को हल करने के लिए , डिस्टर्ब फोल्डर को नजरअंदाज किए बिना , .npmignoreअपनी .gitignoreफाइल के आधार पर एक फाइल बनाएं ।

Soure: https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package


3
आपकी त्वरित प्रतिक्रिया के लिए धन्यवाद। आपकी प्रतिक्रिया निश्चित रूप से सही है, लेकिन अब मैं यूजीन द्वारा सुझाए गए "फाइलों" दृष्टिकोण के साथ जा रहा हूं क्योंकि यह मुझे अधिक प्रत्यक्ष लगता है। कृपया उसकी प्रतिक्रिया के तहत मेरी विस्तृत टिप्पणी देखें।
नरेश

3
आपको बहुत - बहुत धन्यवाद!
13

0

स्क्रिप्ट से डेटा फ़ाइलों का उपयोग करने का न्यूनतम उदाहरण

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

यह आसानी से उल्लिखित तकनीकों का उपयोग करके किया जा सकता है: नोड में।जेएस मैं एक मॉड्यूल का पथ कैसे प्राप्त कर सकता हूं जिसे मुझे आवश्यकता है कि * नहीं * मेरा (कुछ नोड_मॉडल में)

पूरा उदाहरण यहां पाया जा सकता है:

इस सेटअप के साथ, फ़ाइल mydata.txtको node_modules/cirosantilli-data-files/mydata.txtइंस्टॉलेशन के बाद रखा जाता है क्योंकि हमने इसे अपनी files:प्रविष्टि में जोड़ा है package.json

हमारा फ़ंक्शन myfuncतब उस फ़ाइल को ढूंढ सकता है और उपयोग करके उसकी सामग्री का उपयोग कर सकता है require.resolve। यह सिर्फ ./cirosantilli-data-filesपाठ्यक्रम के निष्पादन योग्य पर काम करता है ।

package.json

{
  "bin": {
    "cirosantilli-data-files": "cirosantilli-data-files"
  },
  "license": "MIT",
  "files":  [
    "cirosantilli-data-files",
    "mydata.txt",
    "index.js"
  ],
  "name": "cirosantilli-data-files",
  "repository": "cirosantilli/linux-kernel-module-cheat",
  "version": "0.1.0"
}

mydata.txt

hello world

index.js

const fs = require('fs');
const path = require('path');

function myfunc() {
  const package_path = path.dirname(require.resolve(
    path.join('cirosantilli-data-files', 'package.json')));
  return fs.readFileSync(path.join(package_path, 'mydata.txt'), 'utf-8');
}
exports.myfunc = myfunc;

cirosantilli-डाटा-फ़ाइलें

#!/usr/bin/env node
const cirosantilli_data_files = require('cirosantilli-data-files');
console.log(cirosantilli_data_files.myfunc());

is-installed-globallyपैकेज तो उपयोगी है अगर आप निर्भर करता है अगर वे स्थानीय रूप से या विश्व स्तर पर स्थापित कर रहे हैं वितरित फ़ाइलों के लिए संबंधित पथ उत्पन्न करना चाहते है: कैसे पता लगाएं कि NPM पैकेज विश्व स्तर पर या स्थानीय स्तर पर स्थापित किया गया था

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.