สคริปต์ Concat เรียงตามลำดับด้วย Gulp


192

กล่าวว่าสำหรับตัวอย่างเช่นคุณกำลังสร้างโครงการ Backbone หรืออะไรก็ตามและคุณจำเป็นต้องโหลดสคริปต์ในลำดับที่แน่นอนเช่นจะต้องมีการโหลดก่อนunderscore.jsbackbone.js

ฉันจะทำให้มันเป็นบทสรุปได้อย่างไรเพื่อที่พวกเขาจะได้อยู่ในระเบียบ?

// JS concat, strip debugging and minify
gulp.task('scripts', function() {
    gulp.src(['./source/js/*.js', './source/js/**/*.js'])
    .pipe(concat('script.js'))
    .pipe(stripDebug())
    .pipe(uglify())
    .pipe(gulp.dest('./build/js/'));
});

ฉันมีลำดับที่ถูกต้องของสคริปต์ในของฉันsource/index.htmlแต่เนื่องจากไฟล์ถูกจัดเรียงตามลำดับตัวอักษร gulp จะต่อกันunderscore.jsหลังจากbackbone.jsนั้นและลำดับของสคริปต์ในของฉันsource/index.htmlไม่สำคัญมันจึงดูที่ไฟล์ในไดเรกทอรี

ดังนั้นใครมีความคิดเกี่ยวกับเรื่องนี้?

คิดที่ดีที่สุดที่ฉันได้เป็นสคริปต์ที่จะเปลี่ยนชื่อผู้ขายที่มี1, 2, 3เพื่อให้พวกเขาสั่งซื้อที่เหมาะสม แต่ผมไม่แน่ใจว่าถ้าฉันเช่นนี้

เมื่อฉันเรียนรู้เพิ่มเติมฉันพบว่า Browserify เป็นวิธีแก้ปัญหาที่ยอดเยี่ยมมันอาจเป็นความเจ็บปวดในตอนแรก แต่มันก็ยอดเยี่ยม


4
ฉันอาจพูดถึงว่าวันนี้ฉันกำลังใช้ browserify มันมีเส้นโค้งการเรียนรู้เพียงเล็กน้อยของตัวเอง IMO ตอนแรกฉันพยายาม แต่เบราว์เซอร์อึกเป็นวิธีที่ยอดเยี่ยม! การอนุญาตให้โค้ดของคุณเป็นแบบแยกส่วน! คุณจัดการใบสั่งใน shim ดังนั้นไม่จำเป็นต้องต่อกันเมื่อใช้ browserify
Michael Joseph Aubry

สนใจที่จะให้รายละเอียดเพิ่มเติมเกี่ยวกับโซลูชันหรือลิงก์ของคุณหรือไม่?
Dmitri Zaitsev

kroltech.com/2013/12/12 ......นี่คือลิงค์ไปยังโครงการสำเร็จรูปที่ช่วยให้ฉันเริ่มต้นด้วยการจัดการโครงการที่ดีจริงๆ หลังจากทุกข์ทรมานกับการเรียนรู้ทั้งหมดนี้ฉันสามารถจัดการโครงการได้ดีขึ้นมาก เขามีโครงการบน GitHub และคุณสามารถดูว่าเขาใช้ Browserify อย่างไร Youtube ช่วยและแน่นอนแหล่งที่มาของตัวเองอยู่เสมอประเมิน underestimated github.com/substack/node-browserify#usage
Michael Joseph Aubry

โดยพื้นฐานแล้วความคิดจะสามารถใช้ NPM เช่นเดียวกับไวยากรณ์requireที่ส่วนหน้าเพราะแน่นอนว่าถ้าคุณใช้ NPM ในฝั่งเซิร์ฟเวอร์ของคุณคุณจะเห็นว่าคุณต้องการโมดูลได้อย่างไร แต่ Browserify ช่วยให้คุณทำเช่นนั้นในรหัสฝั่งไคลเอ็นต์ โปรดทราบว่าการเริ่มต้นใช้งานต้องมีการแก้ไขเล็กน้อย แต่ส่วนใหญ่จะอยู่ใน package.json และหากคุณต้องการใช้กับ gulp.js หรือ grunt.js หากคุณติดตั้งแพ็คเกจเบราว์เซอร์ gulp / grunt คุณสามารถเรียกใช้gulp/grunt browserifyและเปลี่ยนสคริปต์ของคุณให้เป็นสคริปต์หลักหนึ่งมันเป็นช่วงการเรียนรู้เล็กน้อย แต่คุ้มค่ากับ IMO
Michael Joseph Aubry

ขอบคุณ! ที่จริงฉันมาข้ามบทความดีดีmedium.com/@dickeyxxx/...ทำให้จุดที่ดีที่คุณไม่จำเป็นจริงๆbrowserifyสำหรับAngularโมดูลที่เรียงต่อกันผลงานที่เรียบง่ายและการสั่งซื้อไม่ได้เรื่อง :)
Dmitri Zaitsev

คำตอบ:


199

ฉันมีปัญหาคล้ายกันเมื่อเร็ว ๆ นี้กับ Grunt เมื่อสร้างแอป AngularJS ของฉัน นี่คือคำถามที่ฉันโพสต์

สิ่งที่ฉันทำคือการลงรายชื่อไฟล์ตามลำดับใน grunt config ไฟล์กำหนดค่าจะมีลักษณะดังนี้:

[
  '/path/to/app.js',
  '/path/to/mymodule/mymodule.js',
  '/path/to/mymodule/mymodule/*.js'
]

ฮึดฮัดสามารถที่จะคิดออกว่าไฟล์ใดที่ซ้ำกันและไม่รวมพวกเขา เทคนิคเดียวกันนี้จะทำงานร่วมกับอึกได้เช่นกัน


74
วิธีนี้ใช้งานได้ดีภายใต้อึกเช่นกันโดยวิธีการ อึกจะไม่ทำซ้ำไฟล์เช่นกัน
OverZealous

1
เจ๋ง ๆ ผลงานชิ้นเอกสองชิ้นนี้ยอดเยี่ยมมาก ในที่สุดฉันเพิ่งตั้งค่าไฟล์ gulp.js ของฉันเพื่อทำงานตามที่ฉันต้องการเขียนใน html บางส่วนบันทึกไฟล์และสร้างเว็บไซต์ที่สร้างด้วยกรอบงานที่ดีที่สุดและแนวปฏิบัติที่ดีเพียงกดปุ่ม การอัปเดตจะง่ายขึ้นหากคุณไม่ได้ใช้งานอย่างใดอย่างหนึ่งที่คุณต้องการ!
Michael Joseph Aubry

1
ใช่ ฉันเริ่มใช้ Grunt เมื่อไม่นานมานี้และมันยอดเยี่ยมมาก ไม่มีการฝังแอปพลิเคชัน JavaScript ภายในกรอบแบ็กเอนด์อีกต่อไป
ชาดจอห์นสัน

3
อึกเป็นไฟล์ที่ซ้ำซ้อนในความพยายามของฉัน แต่ฉันรู้ว่าฉันมีกรณีที่แตกต่างกันในอึกกับระบบไฟล์ดังนั้นระวัง! ในกรณีที่ถูกต้องอึกจะไม่ทำซ้ำไฟล์
Chris

2
การสั่งซื้อด้วยตนเองเป็นฝันร้ายในโครงการที่จริงจัง มี sorter ไฟล์พิเศษ - สำหรับ angularjs และอื่น ๆ
zhekaus

135

อีกสิ่งหนึ่งที่ช่วยถ้าคุณต้องการไฟล์บางไฟล์ที่จะมาหลังจากหยดไฟล์คือการแยกไฟล์บางไฟล์ออกจาก glob ของคุณเช่น:

[
  '/src/**/!(foobar)*.js', // all files that end in .js EXCEPT foobar*.js
  '/src/js/foobar.js',
]

คุณสามารถรวมสิ่งนี้เข้ากับการระบุไฟล์ที่ต้องมาก่อนตามที่อธิบายไว้ในคำตอบของ Chad Johnson


อาฉันเห็นโพสต์ของคุณก่อนหน้านี้และมันช่วยให้ฉันใส่โค้ดลงไปsrcและbuildฉันเห็นว่าคุณใช้ไวยากรณ์นั้นฉันก็ลบส่วนนั้นออกเพราะฉันไม่แน่ใจว่าทำไมฉันถึงต้องการ
Michael Joseph Aubry

โอ้ไม่เป็นไรจุดของคุณที่นี่ก็โดนฉันนั่นจะไม่ทำให้ foobar.js สุดท้ายหรือไม่ มันควรจะเป็นวิธีอื่น ๆ ['./source/js/*.js', './source/js/**/underscore.js', './source/js/**/!(underscore)*.js']
Michael Joseph Aubry

ใช่นี่เป็นเพียงความช่วยเหลือเพิ่มเติมอีกเล็กน้อย มีประโยชน์มากที่สุดเมื่อคุณต้องการหรือต้องการรหัสแอปพลิเคชันหลักของคุณหลังจากที่โหลดทุกอย่างอื่นแล้ว ไม่มีเหตุผลที่จะใช้มัน ( !(foobar)) หากคุณรวมไฟล์ไว้ล่วงหน้า
OverZealous

สำหรับแอปพลิเคชัน AngularJS ที่คำจำกัดความของโมดูลของฉันอยู่ในไฟล์ที่ไม่มี 'ขีดกลาง' ในชื่อรูปแบบ Gulp glob นี้ทำงานได้ ['src/app/**/!(*-)*.js', 'src/app/**/*.js']
Sam T

17

ฉันใช้ปลั๊กอินสั่งอึก แต่ก็ไม่ประสบความสำเร็จเท่าที่คุณสามารถเห็นได้โดยสแต็คล้นโพสต์โมดูลโหนดสั่งซื้ออึกมากเกินไปกับลำธารที่ผสาน เมื่อเรียกดู Gulp docs ฉันเจอโมดูลแบบ Streamque ซึ่งทำงานได้ค่อนข้างดีสำหรับการระบุลำดับในการเรียงข้อมูลกรณีของฉัน https://github.com/gulpjs/gulp/blob/master/docs/recipes/using-multiple-sources-in-one-task.md

ตัวอย่างของวิธีที่ฉันใช้มันอยู่ด้านล่าง

var gulp         = require('gulp');
var concat       = require('gulp-concat');
var handleErrors = require('../util/handleErrors');
var streamqueue  = require('streamqueue');

gulp.task('scripts', function() {
    return streamqueue({ objectMode: true },
        gulp.src('./public/angular/config/*.js'),
        gulp.src('./public/angular/services/**/*.js'),
        gulp.src('./public/angular/modules/**/*.js'),
        gulp.src('./public/angular/primitives/**/*.js'),
        gulp.src('./public/js/**/*.js')
    )
        .pipe(concat('app.js'))
        .pipe(gulp.dest('./public/build/js'))
        .on('error', handleErrors);
});

ดูยังสตรีมซีรีส์ ไม่ต้องการให้คุณระบุโหมดวัตถุและทำงานกับ gulp-inject ดูคำตอบของฉัน
Codebling

ดูเหมือนว่าครึ่งปลั๊กอินอึกไม่ทำงานอย่างสม่ำเสมอ (เช่นคำสั่งตามที่คุณชี้ให้เห็น) ซึ่งเป็นความอัปยศร้องไห้เพราะแนวคิดสถาปัตยกรรมของอึกเป็นที่งดงามเพียงแค่คนจำนวนมากที่ใช้งานและบำรุงรักษาปลั๊กอินของพวกเขาไม่ดีฉันคิดว่า ... ฉันพบว่าโมดูลโหนดพื้นฐานมีประโยชน์มากกว่าดังนั้นขอบคุณสำหรับโซลูชันนี้! ใช้งานได้ดี!
Jimmy Hoffa

1
streamqueue, event-stream ไม่ทำงานสำหรับฉัน แต่ merge2 ทำงานตามที่คาดไว้npmjs.com/package/merge2
Alexander Shutau

12

ด้วย gulp-useref คุณสามารถต่อสคริปต์ทั้งหมดที่ประกาศในไฟล์ดัชนีของคุณตามลำดับที่คุณประกาศ

https://www.npmjs.com/package/gulp-useref

var $ = require('gulp-load-plugins')();
gulp.task('jsbuild', function () {
  var assets = $.useref.assets({searchPath: '{.tmp,app}'});
  return gulp.src('app/**/*.html')
    .pipe(assets)
    .pipe($.if('*.js', $.uglify({preserveComments: 'some'})))
    .pipe(gulp.dest('dist'))
    .pipe($.size({title: 'html'}));
});

และใน HTML คุณต้องประกาศชื่อไฟล์บิลด์ที่คุณต้องการสร้างเช่นนี้:

<!-- build:js js/main.min.js -->
    <script src="js/vendor/vendor.js"></script>
    <script src="js/modules/test.js"></script>
    <script src="js/main.js"></script>

ในไดเรกทอรีสร้างของคุณคุณจะมีการอ้างอิงถึง main.min.js ซึ่งจะประกอบด้วยผู้ขาย.js, test.js และ main.js


2
มันสมบูรณ์แบบ! ฉันเกลียดคำตอบที่ฉันต้องการเพื่อกำหนดลำดับ! คุณรู้อะไรไหม? มีการสั่งซื้อ: ในไฟล์ HTML โซลูชั่นที่สมบูรณ์แบบ
Ali Ok

6

สตรีมเรียงลำดับgulp.srcนอกจากนี้ยังอาจถูกนำมาใช้เพื่อให้แน่ใจว่าการสั่งซื้อเฉพาะของไฟล์ที่มี โค้ดตัวอย่างที่ทำให้backbone.jsเสมอเป็นไฟล์สุดท้ายในการประมวลผล:

var gulp = require('gulp');
var sort = require('sort-stream');
gulp.task('scripts', function() {
gulp.src(['./source/js/*.js', './source/js/**/*.js'])
  .pipe(sort(function(a, b){
    aScore = a.path.match(/backbone.js$/) ? 1 : 0;
    bScore = b.path.match(/backbone.js$/) ? 1 : 0;
    return aScore - bScore;
  }))
  .pipe(concat('script.js'))
  .pipe(stripDebug())
  .pipe(uglify())
  .pipe(gulp.dest('./build/js/'));
});

ฉันหวังว่าโมดูลนี้จะทำงานได้เพราะมันดูเหมือนคำตอบที่ง่ายที่สุดสำหรับฉัน แต่ในกรณีของฉันที่ฉันมีชื่อไฟล์ที่มีหมายเลขและฟังก์ชั่นการเปรียบเทียบที่ง่ายมากมันไม่ได้ผล
Jeremy John

5

ฉันเพิ่งเพิ่มตัวเลขไปที่จุดเริ่มต้นของชื่อไฟล์:

0_normalize.scss
1_tikitaka.scss
main.scss

มันทำงานในอึกโดยไม่มีปัญหาใด ๆ


1
ใช่ฉันคิดว่ามันง่ายขึ้นนิดหน่อยฉันหมายถึงถ้าคุณรวบรวมไฟล์ทั้งหมดของคุณเพื่อการผลิตมันไม่ต่างอะไรกับชื่อไฟล์ของคุณในการพัฒนา
Michael Joseph Aubry

2
ฉันเพิ่งพบว่ามันทำงานไม่ถูกต้อง ลองใช้ 1_xx2, 2_xx, 10_xx, 11_xx ใน Windows อย่างน้อยที่สุดจะเป็น 1_xx, 10_xx, 11_xx, 2_xx
dbinott

17
โดยส่วนตัวแล้วฉันไม่เห็นด้วยกับข้อความที่ว่าคุณไม่ได้ตั้งชื่อไฟล์ของคุณในการพัฒนา การพัฒนาทั้งหมดควรมุ่งเน้นที่มนุษย์เป็นอันดับแรกไม่ใช่มุ่งเน้นที่คอมพิวเตอร์ การเปลี่ยนไฟล์ของคุณเพื่อให้ตรงกับเครื่องมือสร้างของคุณเอาชนะจุดประสงค์ของเครื่องมือสร้าง เปลี่ยนงานสร้างของคุณเพื่อให้ตรงกับโครงการของคุณไม่ใช่วิธีอื่น
Jon Hieb

2
@JonHieb ในทางใดทางหนึ่งการนำหน้าไฟล์ของคุณด้วยตัวเลขจะช่วยให้นักพัฒนาซอฟต์แวร์รายต่อไปรู้ว่าการขึ้นต่อกันของแต่ละไฟล์ไม่ใช่หรือ? หากฉันเปิดโฟลเดอร์และดู 1_foo.js, 2_bar.js, 3_baz.js ฉันจะเปิดไฟล์เหล่านั้นตามลำดับและอ่านเริ่มอ่านโค้ดที่ 1_foo.js
sqram

ฉันได้พบว่า gulp.src รัน async ซึ่งหมายความว่าสิ่งนี้จะไม่ทำงานอย่างสม่ำเสมอในกรณีที่มีไฟล์มากขึ้นในการดำเนินการใน dir
Jeremy John

5

ฉันมีการจัดสคริปต์ของฉันในโฟลเดอร์ที่แตกต่างกันสำหรับแต่ละแพ็คเกจที่ฉันดึงมาจากร่มเงารวมถึงสคริปต์ของตัวเองสำหรับแอปของฉัน เนื่องจากคุณกำลังจะแสดงรายการคำสั่งของสคริปต์เหล่านี้อยู่ที่ไหนสักแห่งทำไมไม่เพียงแค่เขียนมันไว้ในไฟล์อึกของคุณ? สำหรับนักพัฒนาใหม่ในโครงการของคุณเป็นเรื่องดีที่จุดสิ้นสุดสคริปต์ทั้งหมดของคุณอยู่ในรายการที่นี่ คุณสามารถทำได้ด้วยgulp-add-src :

gulpfile.js

var gulp = require('gulp'),
    less = require('gulp-less'),
    minifyCSS = require('gulp-minify-css'),
    uglify = require('gulp-uglify'),
    concat = require('gulp-concat'),
    addsrc = require('gulp-add-src'),
    sourcemaps = require('gulp-sourcemaps');

// CSS & Less
gulp.task('css', function(){
    gulp.src('less/all.less')
        .pipe(sourcemaps.init())
        .pipe(less())
        .pipe(minifyCSS())
        .pipe(sourcemaps.write('source-maps'))
        .pipe(gulp.dest('public/css'));
});

// JS
gulp.task('js', function() {
    gulp.src('resources/assets/bower/jquery/dist/jquery.js')
    .pipe(addsrc.append('resources/assets/bower/bootstrap/dist/js/bootstrap.js'))
    .pipe(addsrc.append('resources/assets/bower/blahblah/dist/js/blah.js'))
    .pipe(addsrc.append('resources/assets/js/my-script.js'))
    .pipe(sourcemaps.init())
    .pipe(concat('all.js'))
    .pipe(uglify())
    .pipe(sourcemaps.write('source-maps'))
    .pipe(gulp.dest('public/js'));
});

gulp.task('default',['css','js']);

หมายเหตุ:เพิ่ม jQuery และ Bootstrap เพื่อการสาธิตการสั่งซื้อ น่าจะดีกว่าที่จะใช้ CDN สำหรับผู้ที่ใช้กันอย่างแพร่หลายและเบราว์เซอร์อาจถูกแคชไว้จากไซต์อื่นแล้ว


3

ลองชุดสตรีม มันใช้งานได้เหมือนmerge-stream / event-stream.merge ()ยกเว้นว่าจะเป็นการต่อท้าย แต่มันจะต่อท้าย ไม่ต้องการให้คุณระบุโหมดวัตถุเช่นstreamqueueดังนั้นโค้ดของคุณจึงออกมาสะอาดตา

var series = require('stream-series');

gulp.task('minifyInOrder', function() {
    return series(gulp.src('vendor/*'),gulp.src('extra'),gulp.src('house/*'))
        .pipe(concat('a.js'))
        .pipe(uglify())
        .pipe(gulp.dest('dest'))
});

2

merge2ดูเหมือนว่าเป็นเครื่องมือเดียวที่ได้รับการดูแลและคงไว้ซึ่งการรวมกันของกระแสข้อมูลที่สั่งในขณะนี้

อัพเดท 2020

API มีการเปลี่ยนแปลงอยู่ตลอดเวลาห้องสมุดบางแห่งไม่สามารถใช้งานได้หรือมีช่องโหว่หรือการอ้างอิงของพวกเขามีช่องโหว่ที่ไม่ได้รับการแก้ไขเป็นเวลาหลายปี สำหรับการปรับแต่งไฟล์ข้อความคุณควรใช้สคริปต์ NodeJS ที่กำหนดเองและไลบรารี่ที่ได้รับความนิยมเช่นglobbyและfs-extraพร้อมกับไลบรารี่อื่น ๆ ที่ไม่มี Gulp, Grunt และอื่น ๆ

import globby from 'globby';
import fs from 'fs-extra';

async function bundleScripts() {
    const rootPaths = await globby('./source/js/*.js');
    const otherPaths = (await globby('./source/**/*.js'))
        .filter(f => !rootFiles.includes(f));
    const paths = rootPaths.concat(otherPaths);

    const files = Promise.all(
        paths.map(
            // Returns a Promise
            path => fs.readFile(path, {encoding: 'utf8'})
        )
    );

    let bundle = files.join('\n');
    bundle = uglify(bundle);
    bundle = whatever(bundle);
    bundle = bundle.replace(/\/\*.*?\*\//g, '');

    await fs.outputFile('./build/js/script.js', bundle, {encoding: 'utf8'});
}

bundleScripts.then(() => console.log('done');

1

วิธีอื่นคือใช้ปลั๊กอินอึกที่สร้างขึ้นสำหรับปัญหานี้โดยเฉพาะ https://www.npmjs.com/package/gulp-ng-module-sort

ช่วยให้คุณสามารถจัดเรียงสคริปต์ของคุณโดยเพิ่มใน.pipe(ngModuleSort()):

var ngModuleSort = require('gulp-ng-module-sort');
var concat = require('gulp-concat');

gulp.task('angular-scripts', function() {
    return gulp.src('./src/app/**/*.js')
        .pipe(ngModuleSort())
        .pipe(concat('angularAppScripts.js))
        .pipe(gulp.dest('./dist/));
});

ถือว่าการประชุมไดเรกทอรีของ:

|——— src/
|   |——— app/
|       |——— module1/
|           |——— sub-module1/
|               |——— sub-module1.js
|           |——— module1.js
|       |——— module2/
|           |——— sub-module2/
|               |——— sub-module2.js
|           |——— sub-module3/
|               |——— sub-module3.js
|           |——— module2.js
|   |——— app.js

หวังว่านี่จะช่วยได้!


1

สำหรับฉันฉันมี natualSort () และ angularFileSort () ในไพพ์ซึ่งเรียงลำดับไฟล์ใหม่ ฉันลบมันออกและตอนนี้ก็ใช้ได้ดีสำหรับฉัน

$.inject( // app/**/*.js files
    gulp.src(paths.jsFiles)
      .pipe($.plumber()), // use plumber so watch can start despite js errors
      //.pipe($.naturalSort())
      //.pipe($.angularFilesort()),
    {relative: true}))

1

ฉันแค่ใช้ gulp-angular-filesort

function concatOrder() {

    return gulp.src('./build/src/app/**/*.js')
        .pipe(sort())
        .pipe(plug.concat('concat.js'))
        .pipe(gulp.dest('./output/'));
}

อ๊ะฉันเพิ่งรู้ว่าคุณไม่ได้ถามเกี่ยวกับเชิงมุมขอโทษ
แม

0

ฉันอยู่ในสภาพแวดล้อมของโมดูลที่ทั้งหมดเป็นผู้อ้างอิงหลักโดยใช้อึก ดังนั้นcoreโมดูลจะต้องผนวกเข้ากับคนอื่น ๆ ก่อน

ฉันทำอะไรลงไป:

  1. ย้ายสคริปต์ทั้งหมดไปยังsrcโฟลเดอร์
  2. เพียงไดเรกทอรีgulp-renameของคุณcore_core
  3. อึกกำลังรักษาลำดับของคุณgulp.src, concat ของฉันsrcมีลักษณะเช่นนี้:

    concat: ['./client/src/js/*.js', './client/src/js/**/*.js', './client/src/js/**/**/*.js']

เห็นได้ชัดว่ามันจะใช้_เป็นไดเรกทอรีแรกจากรายการ (เรียงลำดับตามธรรมชาติ?)

หมายเหตุ (angularjs): จากนั้นฉันใช้gulp-angular-extenderเพื่อเพิ่มโมดูลเข้ากับcoreโมดูลแบบไดนามิก รวบรวมดูเหมือนว่านี้:

angular.module('Core', ["ui.router","mm.foundation",(...),"Admin","Products"])

ตำแหน่งที่ผู้ดูแลระบบและผลิตภัณฑ์เป็นสองโมดูล


0

ถ้าคุณต้องการที่จะสั่งซื้อห้องสมุดของบุคคลที่สามอ้างอิงลองwiredep แพคเกจนี้จะตรวจสอบการขึ้นต่อกันของแต่ละแพ็คเกจใน bower.json โดยทั่วไปจะทำการส่งให้คุณ


0

ฉันลองใช้วิธีแก้ไขปัญหาต่าง ๆ จากหน้านี้ แต่ไม่ได้ผล ฉันมีไฟล์หมายเลขที่ฉันต้องการเรียงลำดับโดยใช้ตัวอักษรแบบตัวอักษรดังนั้นเมื่อมีการเรียงไฟล์เหล่านั้นconcat()ในลำดับเดียวกัน นั่นคือรักษาลำดับของอินพุตแบบวนซ้ำ ง่ายใช่มั้ย

นี่คือรหัสการพิสูจน์แนวคิดของฉัน ( printเพื่อดูคำสั่งที่พิมพ์ไปยัง cli):

var order = require('gulp-order');
var gulp = require('gulp');
var print = require('gulp-print').default;

var options = {};

options.rootPath = {
  inputDir: process.env.INIT_CWD + '/Draft',
  inputGlob: '/**/*.md',
};

gulp.task('default', function(){
  gulp.src(options.rootPath.inputDir + options.rootPath.inputGlob, {base: '.'})
    .pipe(order([options.rootPath.inputDir + options.rootPath.inputGlob]))
    .pipe(print());
});

เหตุผลของความบ้าคลั่งของgulp.src? ฉันพิจารณาแล้วว่าgulp.srcใช้งาน async เมื่อฉันสามารถใช้sleep()ฟังก์ชั่นได้ (โดยใช้ a.mapพร้อมกับเพิ่มจำนวน sleeptime ตามดัชนี) เพื่อจัดลำดับสตรีมเอาท์พุทอย่างถูกต้อง

ผลที่สุดของ async ของsrcค่าเฉลี่ย dirs มีไฟล์มากขึ้นมาหลังจากที่ dirs มีไฟล์น้อยลงเพราะใช้เวลาในการประมวลผลนานกว่า


1
คุณพบทางเลือกแบบซิงโครนัส
ELLIOTTCABLE

0

ในการตั้งค่าอึกของฉันฉันกำลังระบุไฟล์ผู้ขายก่อนแล้วจึงระบุทุกอย่าง (ทั่วไปมากขึ้น) วินาที และทำให้ผู้ขาย js ประสบความสำเร็จก่อนหน้าสิ่งที่กำหนดเองอื่น ๆ

gulp.src([
  // vendor folder first
  path.join(folder, '/vendor/**/*.js'),
  // custom js after vendor
  path.join(folder, '/**/*.js')
])    

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.