এনপিএম ব্যবহার করে প্যাকেজের একাধিক সংস্করণ কীভাবে ইনস্টল করবেন


101

Https://github.com/npm/npm/issues/2943 এর কারণে , এনপিএম কখনই উলেস প্যাকেজগুলির ক্ষমতা এবং একই প্যাকেজের একাধিক সংস্করণ ইনস্টল করার ক্ষমতা সমর্থন করবে না।

গিথুব ইস্যুতে পোস্ট করা কাজের ক্ষেত্রগুলি খাঁটি-জেএস মডিউলগুলির জন্য কাজ করতে পারে তবে এনএমপি ফ্রন্টএন্ড প্যাকেজ পরিচালনার জন্য একটি মান হিসাবে পরিণত হওয়ায় প্যাকেজগুলিতে এখন বিভিন্ন সম্পদ যেমন সিএসএস অন্তর্ভুক্ত রয়েছে।

একই প্যাকেজের একাধিক সংস্করণ ইনস্টল করার জন্য কি কোনও কার্যকারিতা রয়েছে?

আমি যে সেরা ধারণাটি নিয়ে এসেছি তা হ'ল একটি প্যাকেজ "ক্লোন" করা এবং কিছুটা আলাদা নামের সাথে প্রকাশ করা।

উদাহরণস্বরূপ, যদি আপনি একাধিক সংস্করণ প্রয়োজন jquery, আপনি শুধু প্যাকেজ নামক প্রকাশ পারে jquery-alias1, jquery-alias2, jquery-alias3ইত্যাদি, এবং তারপর যথাযথ সংস্করণ সেট আপনারpackage.json

অথবা তোমাদেরকে তাদের সংস্করণ সংখ্যা, যেমন অনুযায়ী প্যাকেজ নাম কি হতে পারে jquery-1.11.x, jquery-2.1.xইত্যাদি ..

এই উভয় পন্থা যদিও ম্লান মনে হচ্ছে। আরও ভাল আছে?


ফ্রন্টএন্ড প্যাকেজ পরিচালনায় মানটিকে শক্ত করে না যা সহজেই এটি করতে পারে
laggingreflex

হ্যাঁ বোরও এখানে বিকল্প হিসাবে মনে হয়। এটি খুব খারাপ যে কোনও এনপিএম সমাধান বলে মনে হয় না, কারণ একটি বড় টিমের সাথে অন্য প্যাকেজ পরিচালনা ব্যবস্থা প্রবর্তন করা কঠিন হতে পারে। বিশেষত যদি আপনার এনএমপি সমর্থন করার জন্য ইতিমধ্যে অবকাঠামো স্থাপন করা হয় (যেমন, একটি বেসরকারী এনএমপি রেজিস্ট্রি সার্ভার)
চিহ্নিত করুন

উত্তর:


104

এনপিএম v6.9.0 হিসাবে , এনপিএম এখন প্যাকেজ এলিয়াস সমর্থন করে। এটি সুতার ব্যবহারের মতো একই বাক্য গঠন প্রয়োগ করে :

npm install jquery2@npm:jquery@2
npm install jquery3@npm:jquery@3

এটি নিম্নলিখিতগুলিতে যুক্ত করে package.json:

"dependencies": {
   "jquery2": "npm:jquery@^2.2.4",
   "jquery3": "npm:jquery@^3.4.1"
}

এই সিনট্যাক্সের সাহায্যে সরাসরি গিটহাব থেকে ইনস্টল করা সম্ভব। উদাহরণস্বরূপ, আপনি যদি এনপিএম রেজিস্ট্রি সংস্করণ এবং প্যাকেজের একটি গিটহাব ফর্ক উভয়ই ইনস্টল করতে চান foobar:

npm install foobar
npm install foobar-fork@github:username/foobar

4
সুতা এছাড়াও সমর্থন প্যাকেজ এলিয়াসিং
গ্রেগ কে

হাই, আমি 2 টি প্যাকেজ ইনস্টল করার জন্য এই পদক্ষেপটি ব্যবহার করে দেখেছি: "রিএ্যাক্ট-নেটিভ-ট্র্যাক-প্লেয়ার": "1.1.4" এবং "রিট্যাক্ট নেটিভ-ট্র্যাক-প্লেয়ার": "1.1.8"। এটি আইওএসে ভাল কাজ করে, তবে অ্যান্ড্রয়েডে এটি একটি ত্রুটি দেখায় যে "মিউজিক ম্যানেজার $ 1 একাধিকবার সংজ্ঞায়িত হয়েছে"। আমি কীভাবে অ্যান্ড্রয়েডকে 1.1.8 বাড়ানো থেকে আটকাতে পারি?
EmBeCoRau

লাইব্রেরিতে কিছু দ্বন্দ্বের কারণে, আমার আইওএসে 1.1.8 এবং অ্যান্ড্রয়েডে 1.1.4 ব্যবহার করতে হবে
এমবিকোরআউ

আমার জন্য eslinteslint6
নির্ভর করে

75

আমি আমার মতো যে কেউ সুতা ব্যবহার করছে এবং এখানে অবতরণ করেছে তার জন্য এখানে পোস্ট করতে চেয়েছিলাম । এটি এনপিএমের জন্য কম-বেশি ড্রপ-ইন প্রতিস্থাপন যা বাক্সের বাইরে থাকা সমর্থন করে:

yarn add material-ui@latest
yarn add material-ui-next@npm:material-ui@next
then

import FlatButton from 'material-ui/FlatButton'; // v0.x
import Button from 'material-ui-next/Button'; // v1.x

(উদাহরণস্বরূপ ক্রেডিট https://github.com/callemall/matory-ui/issues/7195#issuecomment-314547601 এ যায় )


17
ধন্যবাদ. জেনেরিক সূত্রটি কেবল তা স্পষ্ট করে জানাতে <alternative-name>@npm:<package-name>@<version>
নিকোসকেজ

5

দেখে মনে হচ্ছে "জেএসপিএম" সম্ভবত আপনি যে সরঞ্জামটি সন্ধান করছেন তা হতে পারে। জেএসপিএম এনপিএমের শীর্ষে নির্মিত তবে আপনাকে একাধিক উত্স (গিথুব, এনপিএম, ইত্যাদি) থেকে প্যাকেজগুলি টানতে দেয়। এটি মডিউলগুলি লোড করার জন্য সামনের প্রান্তে System.js সর্বজনীন মডিউল লোডার ব্যবহার করে এবং এর পক্ষে যুক্তিযুক্ত সহজ যে "সংস্করণ-প্রত্যয়যুক্ত ফোল্ডারে ডাউনলোড করতে ফ্ল্যাট সংস্করণ পরিচালনা ব্যবহার করে"।

jspm.io

আপনি যখন জেএসপিএম দিয়ে একটি প্যাকেজ ইনস্টল করেন আপনি সেই প্যাকেজটিকে একটি নির্দিষ্ট নাম দিয়ে রাখতে পারেন, যা আপনি পরে requireবিশেষত আপনার মডিউলগুলিতে করতে পারেন ।

$ jspm install jquery
... (status msgs) ...
ok   Installed jquery as github:components/jquery@^2.1.4 (2.1.4)

$ jspm install jqueryOne=jquery@1.11.3
... (status msgs) ...
ok   Installed jqueryOne as github:components/jquery@1.11.3 (1.11.3)

      github:components/jquery 1.11.3 2.1.4

তারপরে আপনার জেএসে, আপনি সহজভাবে require(jquery)এবং / অথবা require(jqueryOne)প্রয়োজনীয় হিসাবে আপনাকে প্রয়োজনীয় হিসাবে পিছনে যেতে পারবেন।

আপনি যে কোনও প্যাকেজের একাধিক সংস্করণ ব্যবহার করতে চান এটি একই রকম হয়।


2

এটি পরিষ্কারভাবে করা বেশ কঠিন, এনপিএমের যেভাবে কাজ করে তার কারণে, তাই আমি প্রযোজনায় এটি করার চেষ্টা করা এড়াতে চাই।

তবে, ইন্টিগ্রেশন টেস্টিং এবং অনুরূপ ব্যবহারের ক্ষেত্রে আমি মাল্টিডেপ নামে একটি প্যাকেজ তৈরি করেছি যা আপনাকে একই প্যাকেজের একাধিক সংস্করণ ইনস্টল করতে দেয় এবং requireসেগুলি এর মতো করে:

var multidepPackages = require('multidep')('test/multidep.json');

var jquery1 = multidepRequire('jquery', '1.11.3');
var jquery2 = multidepRequire('jquery', '2.1.4');

0

এনপিএম ইনস্টল সংস্করণ ( https://github.com/scott113341/npm-install-version ) এছাড়াও একটি বিকল্প। এটি মূলত এখানের অন্যান্য সমাধানগুলির কিছু (প্রযুক্তিগত ভাষায়) যা করে তা ব্যবহার করে তবে এটি বেশ সোজা। কোনও সংস্করণ নম্বর (এনপিএম দ্বারা ব্যবহৃত স্ট্যান্ডার্ড @version কমান্ড প্যারাম) ইনস্টল করা মডিউলগুলি পূর্বেই এই নামের নোড_মডিউলগুলির অধীন একটি সাব-ফোল্ডারে ইনস্টল করা হবে । আপনি প্রতি মডিউল গন্তব্য দিরও নিয়ন্ত্রণ করতে পারেন - যা বিল্ড সিস্টেমের জন্য কার্যকর।

গিটহাব ডক্স থেকে ব্যবহারের কোড স্নিপেট:

const niv = require('npm-install-version');
const benchmark = require('./some-benchmark-function.js');

niv.install('csjs@1.0.0');
// installs csjs@1.0.0 to node_modules/csjs@1.0.0/

niv.install('csjs@1.0.1');
// installs csjs@1.0.1 to node_modules/csjs@1.0.1/

const csjs_old = niv.require('csjs@1.0.0');
const csjs_new = niv.require('csjs@1.0.1');
// require the old and new versions of csjs

benchmark([csjs_old, csjs_new], 'some-test-input');
// run our fake benchmark function on the old and new versions of csjs

0

install-npm-version( https://github.com/scott-lin/install-npm-version ) এখনও অন্য একটি বিকল্প। এটি কমান্ড লাইনে বা একটি প্রোগ্রাম্যাটিক ইন্টারফেসের মাধ্যমে ব্যবহার করা যেতে পারে - যা আধুনিক বিকাশের জন্য টাইপস্ক্রিপ্টে লেখা রয়েছে।

উদাহরণ # 1: সংস্করণযুক্ত (ডিফল্ট) ডিরেক্টরিতে ইনস্টল করুন

import inv = require('install-npm-version');

inv.Install('chalk@2.4.0');
// installs chalk@2.4.0 to node_modules/chalk@2.4.0/

inv.Install('chalk@2.4.1');
// installs chalk@2.4.1 to node_modules/chalk@2.4.1/

উদাহরণ # 2: কাস্টম ডিরেক্টরিতে ইনস্টল করুন

import inv = require('install-npm-version');

inv.Install('chalk@2.4.0', { 'Destination': 'some/path/chalk' });
// installs chalk@2.4.0 to node_modules/some/path/chalk/

উদাহরণ # 3: নীরব বা গোলমাল স্ট্যান্ডার্ড আউটপুট সহ ইনস্টল করুন

import inv = require('install-npm-version');

inv.Install('chalk@2.4.0', { 'Verbosity': 'Silent' });
inv.Install('chalk@2.4.0', { 'Verbosity': 'Debug' });

উদাহরণ # 4: একটি বিদ্যমান ইনস্টলেশন ওভাররাইট করুন

import inv = require('install-npm-version');

inv.Install('chalk@2.4.0', { 'Destination': 'mydir' });
// installs chalk@2.4.0 to node_modules/mydir/

inv.Install('chalk@2.4.1', { 'Destination': 'mydir' });
// does not install chalk@2.4.1 since node_modules/mydir/ already exists

inv.Install('chalk@2.4.1', { 'Destination': 'mydir', 'Overwrite': true });
// installs chalk@2.4.1 to node_modules/mydir/ by overwriting existing install

0

আমার ক্ষেত্রে, আমি বিশ্বব্যাপী যে সংস্করণটি ইনস্টল করেছি তার চেয়ে বেশি পুরানো সংস্করণ তৈরি-রিঅ্যাক্ট-অ্যাপ্লিকেশন ইনস্টল করা দরকার, কারণ আমি একটি পাঠ্যক্রম নিচ্ছিলাম যা কার্যভারের জন্য এই পুরানো সংস্করণটির প্রয়োজন।

আমি কেবলমাত্র এই পুরানো সংস্করণটি ধারণ করতে একটি নতুন ফোল্ডার তৈরি করেছি, এতে সিডি করব এবং একটি করেছি

npm init

এই শেল প্যাকেজ.জসন সেট আপ করার পরে, আমার প্রয়োজনীয় ক্রিয়েট-রিএ্যাক্ট-অ্যাপ্লিকেশনটির সঠিক সংস্করণটি ইনস্টল করেছি

npm install create-react-app@1.5.2

যা তৈরি-প্রতিক্রিয়া-অ্যাপ্লিকেশনটির পুরানো সংস্করণ সহ একটি স্থানীয় নোড_মডিউল ফোল্ডার তৈরি করেছে।

তারপরে আমি এই পুরানো সংস্করণটির শর্টকাট হিসাবে একটি সাধারণ বাশ স্ক্রিপ্ট (create-react-app.sh) তৈরি করেছি এবং সমস্ত আর্গুমেন্ট ফরোয়ার্ড করার জন্য ব্যাশ ভেরিয়েবল "$ @" ব্যবহার করেছি:

#!/bin/bash
{full-directory-path}/node_modules/create-react-app/index.js "$@"

অবশেষে, আমি এই সহজ বাশ স্ক্রিপ্টটি কার্যকর করতে পেরেছি

chmod u+x create-react-app.sh

সুতরাং সরাসরি এই বাশ স্ক্রিপ্টটি চালানো তৈরি-প্রতিক্রিয়া-অ্যাপ্লিকেশনটির পুরানো সংস্করণ কার্যকর করবে:

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