এনপিএম ক্লিন মডিউল


144

নোড_মডিউলগুলির অধীনে সমস্ত মডিউলগুলি আনবিল্ড করার জন্য এনপিএম পাওয়ার কোনও উপায় আছে কি? এনপিএম পুনর্নির্মাণের মতো এমন কিছু যা সমস্ত বিল্ডিং শিল্পকর্মগুলি সরিয়ে দেয় তবে সেগুলি পুনর্নির্মাণ করে না?


4
ভেবেছিলাম যে তুমি আর জিজ্ঞাসা করবেনা. আমি Git মধ্যে আমার node_modules ডিরেক্টরির পরীক্ষণ করে থাকেন হিসাবে সুপারিশ mikealrogers.com/posts/nodemodules-in-git.html । যখন আমি একটি নতুন মডিউল যুক্ত করি বা একটি বর্তমান আপডেট করি, তখন আমি গিটে বিল্ড আর্টফিটগুলি শেষ করি যা সেখানে না থাকা উচিত এবং সেগুলি পরিষ্কার করতে হবে। আমি ভাবছিলাম আমি যদি তাদের প্রথমে পরিষ্কার করতে পারি তবে প্রক্রিয়াটি আরও কিছুটা মসৃণ হয়ে যাবে।
ডেভ কজেই

1
একটি দ্রুত নোট: এখন যে এনপিএম সমর্থন করে shrinkwrap( npmjs.org/doc/shrinkwrap.html দেখুন ), আপনি আপনার সমস্ত নির্ভরতার সংস্করণগুলি লক করতে পারেন ( কেবলমাত্র শীর্ষ স্তরেরগুলির পরিবর্তে) ones
মিশেল টিলে

2
এই বৈশিষ্ট্যটি না থাকা ক্রস প্ল্যাটফর্মের বিকাশের জন্যও সফল হয়। আমরা ম্যাকের উপর বিকাশ করি এবং লিনাক্সে সিআই চালাই, এবং নোড_মডিউলগুলি ডিরেক্টরিটি সরিয়ে ফেলতে হবে এবং প্রতিবার যখন আমরা লিনাক্সের উপর কোনও বিল্ড তৈরি করি তখন পুরোপুরি পুনরায় ইনস্টল করা প্রয়োজন, যা অনেক সময় ব্যয় করে।
জেবিসিপি

4
@ জেবিসিপি আপনি এটি ভুল করছেন। আপনার যা করা উচিত তা হল packages.json(ব্যবহার করে npm --save) মডিউলগুলি ইনস্টল করা এবং node_modulesডিরেক্টরিটি .gitignore(যদি গিট ব্যবহার করা হয় ) মধ্যে স্থাপন করা। সিআই আপনার নোড_মডিউলগুলি টানবে না, তবে চালিত করবে npm install। অবশেষে, এনপিএম রেজিস্ট্রি থেকে ডাউনলোড করতে যদি খুব বেশি সময় লাগে তবে ক্যাশে এটি সিনোপিয়ার মতো কিছু ব্যবহার করুন ।
বোজন মার্কোভিচ

1
@ বুজনমারকোভিচ - আপনি সঠিক, এখন আমাদের প্রকল্পগুলি সেটআপ হয়। উপরের আমার মন্তব্যটি প্রায় এক বছর আগে থেকে। কয়েকটি প্রকল্প রয়েছে (গিটে) নোড_মডিউলগুলি প্রতিশ্রুতিবদ্ধ করার সুপারিশ করেছে তবে এটি অবশ্যই সঠিক নয়।
জেবিসিপি

উত্তর:


160

আপনি কেবল নোড_মডিউল ডিরেক্টরি মুছতে পারেন

rm -rf node_modules/

14
এটি নোড_মডিউলগুলির পাশাপাশি সংকলিত আউটপুটটির উত্স সরিয়ে ফেলবে, সুতরাং প্রশ্নের উত্তর দেয় না।
দিগেকো

যদি আপনার এনপিএম লিঙ্কের সাথে সংযুক্তি থাকে তবে এটির উত্স ডিরেক্টরিতে এই মডিউলগুলির উত্সটি মুছে ফেলা হতে পারে যা বেশ বেদনাদায়ক হতে পারে ...
cschuff

12
আমি আমার এটিকে জুড়েছে package.json: "clean": "rm -rf node_modules", "reinstall": "npm run clean && npm install", "rebuild": "npm run clean && npm install && npm run build",। ভাল কাজ মনে হচ্ছে।
লুকাস

5
উইন্ডোজ> আরডি নোড_মডিউল / গুলি
ইশারা সামান্থ

2
@ লুকাস আপনার পক্ষে একটি উত্তর পোস্ট করা উচিত কারণ এটি সর্বাধিক উপযুক্ত
জোসেফ

57

আমি এটি আমার প্যাকেজ.জসনে যুক্ত করেছি:

"build": "npm build",
"clean": "rm -rf node_modules", 
"reinstall": "npm run clean && npm install", 
"rebuild": "npm run clean && npm install && npm run build",

ভাল কাজ মনে হচ্ছে।


2
cleanপ্যাকেজ.জসনে সংজ্ঞায়িত করতে হবে!
সিয়াসটো পাইকার্জ

20
@ সাইস্টোপিকারজ? আমার উত্তর কি উপরে বলে?
লুকাস

লিনাক্স ভিত্তিক মেশিনের ক্ষেত্রে 'আরএম-আরএফ নোড_মডিউলস' ব্যবহার করুন, উইন্ডোজের 'আরএমডিআর / এস / কিউ নোড_মডিউলস' থাকলে
মোহাম্মদ।আব্দো

8

আপনি 'এনএমপি ক্যাশে' কমান্ডের সুবিধা নিতে পারেন যা প্যাকেজ টার্বল ডাউনলোড করে এটি এনপিএম ক্যাশে ডিরেক্টরিতে আনপ্যাক করে।

উত্সটি তখন অনুলিপি করা যায়।

Https://groups.google.com/forum/?fromgroups=#!topic/npm-/mwLuZZkHkfU থেকে সংগ্রহিত ধারণাগুলি ব্যবহার করে আমি নীচের নোড স্ক্রিপ্টটি নিয়ে এসেছি। কোনও ওয়্যারেন্টি নেই, ওয়াইএমএমভি, ইত্যাদি।

var fs = require('fs'),
path = require('path'),
exec = require('child_process').exec,
util = require('util');

var packageFileName = 'package.json';
var modulesDirName = 'node_modules';
var cacheDirectory = process.cwd();
var npmCacheAddMask = 'npm cache add %s@%s; echo %s';
var sourceDirMask = '%s/%s/%s/package';
var targetDirMask = '%s/node_modules/%s';

function deleteFolder(folder) {
    if (fs.existsSync(folder)) {
        var files = fs.readdirSync(folder);
        files.forEach(function(file) {
            file = folder + "/" + file;
            if (fs.lstatSync(file).isDirectory()) {
                deleteFolder(file);
            } else {
                fs.unlinkSync(file);
            }
        });
        fs.rmdirSync(folder);
    }
}

function downloadSource(folder) {
    var packageFile = path.join(folder, packageFileName);
    if (fs.existsSync(packageFile)) {
        var data = fs.readFileSync(packageFile);
        var package = JSON.parse(data);

        function getVersion(data) {
            var version = data.match(/-([^-]+)\.tgz/);
            return version[1];
        }

        var callback = function(error, stdout, stderr) {
            var dependency = stdout.trim();
            var version = getVersion(stderr);
            var sourceDir = util.format(sourceDirMask, cacheDirectory, dependency, version);
            var targetDir = util.format(targetDirMask, folder, dependency);
            var modulesDir = folder + '/' + modulesDirName;

            if (!fs.existsSync(modulesDir)) {
                fs.mkdirSync(modulesDir);
            }

            fs.renameSync(sourceDir, targetDir);
            deleteFolder(cacheDirectory + '/' + dependency);
            downloadSource(targetDir);
        };

        for (dependency in package.dependencies) {
            var version = package.dependencies[dependency];
            exec(util.format(npmCacheAddMask, dependency, version, dependency), callback);
        }
    }
}

if (!fs.existsSync(path.join(process.cwd(), packageFileName))) {
    console.log(util.format("Unable to find file '%s'.", packageFileName));
    process.exit();
}

deleteFolder(path.join(process.cwd(), modulesDirName));
process.env.npm_config_cache = cacheDirectory;
downloadSource(process.cwd());

12
আমি এটি খুব আশ্চর্যজনক মনে করি যে এই জাতীয় প্রাথমিক কার্যকারিতা, যা আসলে এনপিএম দ্বারা প্রস্তাবিত হয়, এটি অর্জনের জন্য একটি হ্যাক প্রয়োজন। বাকি সবাই কী করে? শুধু সুপারিশ এবং ব্যবহার উপেক্ষা npm install?
VitalyB

5

এক কথায় কোন

দুটি মধ্যে, এখনও না

বিল্ডিং ছাড়াই কোনও ইনস্টলেশন --no-buildচালানোর জন্য পতাকাটির জন্য একটি মুক্ত সমস্যা রয়েছে npm install, যা আপনি যা চাইছেন তা করতে ব্যবহৃত হতে পারে।

দেখুন এই উন্মুক্ত ইস্যু


5

ব্যবহার করে দেখুন https://github.com/voidcosmos/npkill

npx npkill

এটি সমস্ত নোড_মডিউলগুলি সন্ধান করবে এবং আপনাকে সেগুলি সরাতে দেবে।

npkill



3

আমি প্যাকেজ.জসনের ভিতরে কয়েকটি লাইন যুক্ত করেছি:

"scripts": {
  ...
  "clean": "rmdir /s /q node_modules",
  "reinstall": "npm run clean && npm install",
  "rebuild": "npm run clean && npm install && rmdir /s /q dist && npm run build --prod",
  ...
}

আপনি যদি চান তবে আপনি এটি cleanব্যবহার করতে পারেন rimraf node_modules


0

এই কাজের জন্য আসলে বিশেষ কমান্ড আছে

npm ci

এটি node_modulesডিরেক্টরি মুছে ফেলবে এবং আপনার package-lock.jsonফাইলের সম্মানের সাথে প্যাকেজ ইনস্টল করবে

আরও তথ্য: https://docs.npmjs.com/cli/ci.html

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