Grunt.js অনুলিপি সহ ডিরেক্টরি থেকে সমস্ত ফাইল অনুলিপি করুন


91

আমি আমার বিল্ড প্রক্রিয়াটির অংশ হিসাবে একটি ডিরেক্টরিতে থাকা সমস্ত ফাইল অন্য ডিরেক্টরিতে অনুলিপি করার চেষ্টা করছি। এটি স্বতন্ত্র ফাইলগুলির জন্য সূক্ষ্মভাবে কাজ করে যা আমি স্পষ্টভাবে নির্দিষ্ট করি তবে আমি যখন পুরো ডিরেক্টরিটি অনুলিপি করার চেষ্টা করি তখন এটি সম্পূর্ণ ডিরেক্টরি কাঠামো (বা কিছুই নয়) অনুলিপি করে we আমার গ্রান্টফিল.জেএস এর প্রাসঙ্গিক অংশটি এখানে:

copy: {
  myvoice: {
    files: [
      { src:"src/html/index.html", dest:"dist/myvoice/index.html" },
      { src:"src/html/css/style.css", dest:"dist/myvoice/css/style.css" },
      { src:"src/html/js/require.js", dest:"dist/myvoice/js/require.js" },
      { src:"build/myvoice/main.js", dest:"dist/myvoice/js/main.js" },
      { src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" }
    ]
  }
},

বিশেষত এটি শেষ পংক্তি যা আমি কাজ করতে পারি না:

      { src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" }

উত্তর:


150

flatten: trueহিসেবে বিকল্প এই উত্তরটি কিছু ক্ষেত্রে জন্য কাজ করতে পারে, কিন্তু এটা করার জন্য, আমার মনে হচ্ছে যে আরো সাধারণ প্রয়োজন (আমার ক্ষেত্রে) একটি ফোল্ডার এবং এর সাব-ফোল্ডারে কাঠামো কপি করতে হয়, যেমন-is dest। দেখে মনে হচ্ছে বেশিরভাগ ক্ষেত্রে আপনার যদি সাব-ফোল্ডার থাকে তবে সেগুলি সম্ভবত কোডের সাথে সেভাবে উল্লেখ করা হচ্ছে। এটি করার মূল কীটি হ'ল cwdবিকল্প, যা নির্দিষ্ট ওয়ার্কিং ডিরেক্টরি সম্পর্কিত ফোল্ডার কাঠামো সংরক্ষণ করবে:

copy: {
  files: {
    cwd: 'path/to/files',  // set working folder / root to copy
    src: '**/*',           // copy all files and subfolders
    dest: 'dist/files',    // destination folder
    expand: true           // required when using cwd
  }
}

ধন্যবাদ - আপনি ঠিক বলেছেন এই উত্তরটি আমি যখন প্রশ্ন জিজ্ঞাসা করছিলাম তখন আরও বেশি যা খুঁজছিলাম। আমি পূর্বের উত্তরের দ্বারা উত্থিত চাটুটি মোকাবেলা করতে শিখেছি তবে এটি বিরক্তিকর ছিল।
ইভান হবস

14
এর জন্য আমি এক ঘন্টারও বেশি সময় হারিয়েছি ... আপনি যদি cwdবিকল্পগুলি ব্যবহার করেন তবে নিশ্চিত হয়ে যান expand:true। যদি আপনি সেট না করেন expand:true, cwd সঠিকভাবে কাজ করবে না।
ডুচিন

4
আমাকে নিশ্চিত করতে হয়েছিল যে ডিরেক্টরি পথগুলি '/' এর সাথে শেষ হয় এবং flatten: falseএই কাজটি পেতে যোগ করতে হবে।
স্যামুয়েল রসেল

**/* আমি যা খুঁজছিলাম তা আমি ** থ্যাঙ্কস ম্যান ব্যবহার করছি ts
স্যাম

43

আপনি যদি কোনও ফাইল গ্লোব নির্দিষ্ট করেন তবে এই টাস্কটি ফোল্ডার কাঠামো বজায় রাখবে। আপনি যা চান সেটি হ'ল flattenবিকল্পটি যা কাঠামোটি সরিয়ে ফেলবে।

{
    expand: true,
    flatten: true,
    src: ['src/html/css/fonts/**'],
    dest: 'dist/myvoice/css/fonts/',
    filter: 'isFile'
}

গিথুব রেপোতে উপলভ্য বাকী বিকল্পগুলি সন্ধান করুন । আশাকরি এটা সাহায্য করবে.


25

আমি যোগ করতে যে বিন্যাস পরিবর্তন চাই উল্লিখিত glob মধ্যে src পরিবর্তন করতে হবে কিভাবে কপি কাজ করে।

দ্বারা সরু আউট হিসাবে bmoeskau উপরে নিম্নলিখিত কপি হবে সবকিছু ভিতরে dist/এবং এটিকে সরান path/to/dir(গন্তব্য মুছে যাওয়ার যদি এটা আগে থেকেই আছে)।

copy: {
  files: {
    expand: true,
    dest: 'path/to/dir',
    cwd: 'dist/',
    src: '**'
  }
}

তবে নোট করুন যে:

copy: {
  files: {
    expand: true,
    dest: 'path/to/dir',
    cwd: 'dist/',
    src: '*'
  }
}

dist/ডিরেক্টরিগুলির ভিতরে কেবল ফাইলগুলি অনুলিপি করে তবে সেই ডিরেক্টরিগুলির বিষয়বস্তু গন্তব্যে অনুলিপি করবে না

এছাড়াও, নীচের সাথে নিম্নলিখিতগুলি কেবল কেবল অভ্যন্তরের সামগ্রীর সাথে ডিরেক্টরিগুলি অনুলিপি src: '*/*'করবে । অর্থাত, কেবলমাত্র ভিতরে থাকা ফাইলগুলি অনুলিপি করা হবে না।dist/dist/

copy: {
  files: {
    expand: true,
    dest: 'path/to/dir',
    cwd: 'dist/',
    src: '*/*'
  }
}

শেষ অবধি, উপরের মত একই, তবে কেবলমাত্র ভিতরে ফাইলগুলি এবং সাব-ডিরেক্টরিতে অন্তর্ভুক্ত ফাইলগুলি src: '**/**'অনুলিপি করবে । সুতরাং গন্তব্যের অভ্যন্তরে কোনও ফোল্ডার থাকবে না।dist/dist/path/to/dir

copy: {
  files: {
    expand: true,
    dest: 'path/to/dir',
    cwd: 'dist/',
    src: '*/*',
    flatten: true,
    filter: 'isFile'
  }
}

4
দুর্দান্ত ব্যাখ্যা! +1
মায়ারোকোড


+1 তারার সংখ্যার অর্থ কী হওয়া উচিত সে সম্পর্কে কোনও কনভেনশন রয়েছে, উদাহরণস্বরূপ **সর্বদা ফাইল এবং ডিরেক্টরি এবং *কেবল ফাইলগুলিই বোঝায় ?
কোডি বাগস্টেইন

4
@ ইম্রে বাশ ম্যানুয়াল থেকে : *একটি একক প্যাটার্ন হিসাবে ব্যবহৃত দুটি সংলগ্ন সমস্ত ফাইল এবং শূন্য বা আরও বেশি ডিরেক্টরি এবং সাব ডিরেক্টরিতে মিলবে । যদি একটি দ্বারা অনুসরণ করা হয় /, দুটি সংলগ্ন *গুলি কেবল ডিরেক্টরি এবং উপ-ডিরেক্টরিগুলির সাথে মিলবে ।
হোর্হে বুকারান

4
**সবকিছুর সাথে মেলে , যেখানে **/ কেবল ডিরেক্টরি এবং উপ-ডিরেক্টরি (ফাইল নয়)।
হোর্হে বুকারান

2

ফাইল বিভাগে (কোফিসক্রিপ্টে) এর পরিবর্তে কোঁকড়া ধনুর্বন্ধনী ব্যবহার করা উচিত ...

copy: {
  files: [
    cwd: 'path/to/files'
    src: '**/*'
    dest: 'dist/files'
    expand: true
  ]
}

0

যদি আপনি কৌণিক ইয়েমেনের সাথে বিকাশ করে থাকেন তবে গ্রান্টের সাথে অনুলিপি করার সবচেয়ে ভাল উপায় এটি। প্রসারিত: cwd ব্যবহার করার সময় সত্য প্রয়োজন। <% = yeoman.app%> হ'ল কেবল অ্যাপ রুট ('।')।

 {
    expand: true,
     cwd: '<%= yeoman.app %>/data',
     dest: '<%= yeoman.dist %>/data',
     src: ['**']
    }

যদিও এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না। আপনার কোডটি ব্যাখ্যামূলক মন্তব্যে ভিড় না করার চেষ্টা করুন, কারণ এটি কোড এবং ব্যাখ্যা উভয়ের পাঠযোগ্যতা হ্রাস করে!
বিদায় স্ট্যাক এক্সচেঞ্জ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.