tôi quản lý để thực hiện nhiệm vụ của tôi sử dụng một plugin ngụm gọi gulp-insert như thế này:Làm cách nào để chèn nội dung vào tệp trong khi xây dựng gulp?
gulp.task('compile-js', function() {
// Minify and bundle client scripts.
var scripts = gulp.src([
srcDir + '/routes/**/*.js',
srcDir + '/shared/js/**/*.js'
])
// Sort angular files so the module definition appears
// first in the bundle.
.pipe(gulpAngularFilesort())
// Add angular dependency injection annotations before
// minifying the bundle.
.pipe(gulpNgAnnotate())
// Begin building source maps for easy debugging of the
// bundled code.
.pipe(gulpSourcemaps.init())
.pipe(gulpConcat('bundle.js'))
// Buffer the bundle.js file and replace the appConfig
// placeholder string with a stringified config object.
.pipe(gulpInsert.transform(function (contents) {
return contents.replace("'{{{appConfigObj}}}'", JSON.stringify(config));
}))
.pipe(gulpUglify())
// Finish off sourcemap tracking and write the map to the
// bottom of the bundle file.
.pipe(gulpSourcemaps.write())
.pipe(gulp.dest(buildDir + '/shared/js'));
return scripts.pipe(gulpLivereload());
});
Những gì tôi đang làm là đọc tập tin cấu hình ứng dụng của chúng tôi được quản lý bởi các module config trên NPM. Lấy tập tin cấu hình của chúng tôi từ mã phía máy chủ là một snap sử dụng var config = require('config');
, nhưng chúng tôi là một ứng dụng một trang và thường xuyên cần truy cập vào các thiết lập cấu hình ở phía máy khách. Để làm điều đó, tôi đặt đối tượng config vào một dịch vụ Angular.
Đây là dịch vụ Góc trước khi xây dựng gulp.
angular.module('app')
.factory('appConfig', function() {
return '{{{appConfigObj}}}';
});
Trình giữ chỗ nằm trong chuỗi để JavaScript hợp lệ cho một số plugin gulp khác xử lý tệp trước. Tiện ích gulpInsert
cho phép tôi chèn cấu hình như thế này.
.pipe(gulpInsert.transform(function (contents) {
return contents.replace("'{{{appConfigObj}}}'", JSON.stringify(config));
}))
Điều này có tác dụng nhưng hơi khó hiểu. Chưa kể rằng nó phải đệm toàn bộ tệp đi kèm để tôi có thể thực hiện thao tác. Có cách nào thanh lịch hơn để thực hiện điều tương tự không? Tốt nhất là cho phép luồng tiếp tục chảy trơn tru mà không phải đệm toàn bộ gói ở cuối? Cảm ơn!
tôi đã lấy cách tiếp cận hơi khác nhau để này. Tôi tạo ra một tập tin json mỗi env. dev.config.js, prod.config.js và trong quá trình xây dựng gulp dev/prod tôi thay thế env.config.js của mình bằng config.js thích hợp và index.html của tôi bao gồm env.config.js. Điều này cảm thấy hơi sạch hơn tìm kiếm và thay thế trong các tập tin – harishr
Xin lỗi, nhưng vấn đề của việc sử dụng bộ đệm là gì? Streaming cũng là một loại đệm, nhưng với kích thước nhỏ hơn. Tuy nhiên, tôi thực sự nghi ngờ rằng toàn bộ bundle.js của bạn vượt quá 1 Mb, hầu như không có gì vào ngày hôm nay. Có thể, bạn không hài lòng với thời gian thực hiện tổng thể của bản dựng. Trong trường hợp đó, bạn nên xem xét sử dụng chức năng 'watch'. –
Đó là một ứng dụng doanh nghiệp lớn Dimitry. Nó chưa quá lớn, nhưng chắc chắn nhất là vậy. Chúng tôi đã đi với gulp cho hiệu suất đạt được mà làm cho thời gian xây dựng có khả năng ngắn hơn nhiều so với cùng một thiết lập với grunt. Tôi đang chăm sóc để làm những việc đúng sớm để cạo bỏ mọi giây có thể đi vào tương lai. – Chev