Плагин Gulp, чтобы сделать JavaScript "включить"
Есть ли плагин Gulp, который позволяет мне включать / объединять файлы JavaScript вместе?
Я пытаюсь найти способ, которым я могу "включить" содержимое одного файла JavaScript в другие. Под включением я имею в виду что-то вроде этого:
// main.js
var a = 2;
///include an-include-file.import.js
// an-include-file.import.js
var b = 5;
"Компилировать" что-то вроде этого:
// compiled.js
var a = 2;
var b = 5;
Или, возможно, даже лучше, что-то вроде этого:
// compiled.js v2
var a = 2;
// wrapped in an anonymous, self-calling function to isolate scope
(function () {
var b = 5;
})();
Я сам написал плагин для этого, но я хотел бы иметь возможность использовать исходные карты. Самостоятельная реализация исходных карт - это немного больше усилий, чем я хотел бы посвятить этому маленькому проекту.
Теперь я знаю, что могу использовать что-то вроде gulp-concat
, но нет простого способа контролировать их порядок. Мне придется изменять gulpfile каждый раз, когда я добавляю новый файл, и вручную перечислять их все (или иметь много сложных шаблонов), что является довольно большой болью.
Я предпочел бы что-то, где я могу использовать импорт или включить, чтобы точно контролировать, куда файл идет, и управлять им из самих сценариев, а не из инструмента сборки. Очень похоже на то, как МЕНЬШЕ или что-то делает.
Что касается LESS, то я называю суффиксные файлы с помощью ".import.less", если я не хочу, чтобы они генерировали свой отдельный файл, а затем @import
их, где я хочу их в других файлах. Это позволяет очень просто генерировать только те файлы, которые я хочу, без простого создания одного гигантского файла.
1 ответ
В итоге я принял идею Майка и использовал WebPack, в дополнение к Babel, для создания модулей в стиле ES6.
Основы выглядят так:
// math.js
export function sum (a, b) { return a + b; }
// main.js
import sum from "math";
console.log(sum(1, 2));
Я использую Gulp для управления процессом сборки, который в упрощенном виде выглядит следующим образом:
var gulp = require('gulp'),
webpack = require('webpack-stream');
gulp.task('build', function () {
return gulp.src('main.js')
.pipe(webpack())
.pipe(gulp.dest('dist'));
});
Мое реальное использование намного сложнее, но это основная идея. Я должен использовать babel-loader (с предустановкой ES2015) в моей конфигурации webpack, чтобы он обрабатывал ES6 в ES5, а затем WebPack объединяет их в один файл.
Связанное чтение:
- Бабель - https://babeljs.io/
- Предустановка Babel ES2015 - https://babeljs.io/docs/plugins/preset-es2015/
- WebPack - https://webpack.github.io/
- Веб-пакет с Gulp - https://webpack.github.io/docs/usage-with-gulp.html
- загрузчик babel - https://github.com/babel/babel-loader