বিতরণ ফাইলগুলির সাথে এনপিএম প্যাকেজ কীভাবে প্রকাশ করবেন?


125

আমি একটি এনএমপি প্যাকেজ প্রকাশ করতে চাই যাতে আমার উত্স পাশাপাশি বিতরণ ফাইল থাকে। আমার গিথুব সংগ্রহস্থলে srcফোল্ডার রয়েছে যা জাভাস্ক্রিপ্ট উত্স ফাইলগুলি রয়েছে। বিল্ড প্রক্রিয়া distবিতরণ ফাইলগুলি ধারণ করে এমন ফোল্ডার তৈরি করে files অবশ্যই, distফোল্ডারটি গিথুব সংগ্রহস্থলে চেক করা হয়নি।

আমি এনপিএম প্যাকেজটি এমনভাবে কীভাবে প্রকাশ করব যে যখন কেউ তা করেন 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": {
    ...
  }
}

উত্তর:


101

প্যাকেজ.জসন ফাইলের "ফাইলগুলি" ক্ষেত্রটি একবার দেখুন https://docs.npmjs.com/files/package.json#files

ডকুমেন্টেশন থেকে:

"ফাইল" ক্ষেত্রটি আপনার প্রকল্পে অন্তর্ভুক্ত করার জন্য ফাইলগুলির একটি অ্যারে। আপনি যদি অ্যারেতে কোনও ফোল্ডারের নাম রাখেন, তবে এতে সেই ফোল্ডারের ভিতরে থাকা ফাইলগুলিও অন্তর্ভুক্ত থাকবে। (যদি না এগুলি অন্য কোনও নিয়ম দ্বারা উপেক্ষা করা হয়))


3
আমি "ফাইলগুলি" ফিল্ডটি ওভাররাইড করে কিনা তা জানতে আগ্রহী .gitignoreবা .npmignore(এটি ডকটি পড়ার মতো বলে মনে হচ্ছে না) - @ নরেশ দয়া করে কোন উপায়টি ঠিকঠাকভাবে কাজ করেছেন তা আমাদের জানান।
শীর্ষস্থানীয়

8
"ফাইল" প্রকৃতপক্ষে .gitignore উপেক্ষা করছে। আমার .gitignore এ আমার "dist" আছে তবে "ফাইল" এ অন্তর্ভুক্ত রয়েছে এবং ফোল্ডারটি এনপিএম এ প্রকাশিত হচ্ছে। "ফাইলগুলি" দেখে মনে হচ্ছে কীভাবে এক্সপেস এবং ব্লুবার্ডের মতো কয়েকটি জনপ্রিয় প্যাকেজ প্রকাশ করা হচ্ছে (অন্যদিকে অন্যান্য প্যাকেজগুলি .npmignore পদ্ধতি ব্যবহার করে)। আপাতত, আমি "ফাইলগুলি" নিয়ে যাচ্ছি কারণ এটি কী প্রকাশ করবেন তা বলার আরও প্রত্যক্ষ উপায় বলে মনে হচ্ছে। তবে আজ দু'বার অন্তত দুপুরে এনপিএম সম্পর্কে আমার জ্ঞান বাড়ানোর জন্য আপনাকে উভয়কে ধন্যবাদ!
নরেশ

3
এটি লক্ষণীয় যে যদি "ফাইলগুলি" নির্দিষ্ট করা থাকে তবে কেবলমাত্র সেই ফাইলগুলি কেবল আপনার প্রকল্পে অন্তর্ভুক্ত রয়েছে (প্যাকেজ.জসন, ইত্যাদি-তে বাদ দেওয়া যায় না এমন ফাইলগুলি বাদে)
বামাকনহটন

176

যখন আপনার npm publish, আপনার কাছে .npmignoreফাইল নেই, এনপিএম আপনার .gitignoreফাইলটি ব্যবহার করবে (আপনার ক্ষেত্রে আপনি distফোল্ডারটি বাদ দিয়েছেন )।

আপনার সমস্যা সমাধানের জন্য ডিস্ট ফোল্ডারটি উপেক্ষা না.npmignore করে আপনার .gitignoreফাইলের ভিত্তিতে একটি ফাইল তৈরি করুন ।

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


3
আপনার দ্রুত প্রতিক্রিয়া জন্য ধন্যবাদ। আপনার প্রতিক্রিয়া অবশ্যই সঠিক, তবে আপাতত আমি ইউজিনের প্রস্তাবিত "ফাইলগুলি" পদ্ধতির সাথে যাচ্ছি কারণ এটি আমার কাছে আরও সরাসরি বলে মনে হচ্ছে। তার প্রতিক্রিয়া অধীনে আমার বিস্তারিত মন্তব্য দেখুন দয়া করে।
নরেশ

3
তোমাকে অনেক ধন্যবাদ!
করভিড

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 প্যাকেজ বিশ্বব্যাপী বা স্থানীয়ভাবে ইনস্টল করা ছিল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.