Я занимаюсь объединением и минификацией файлов javascript. Я делаю это с помощью gulp. Теперь я хочу, чтобы, если я внесу какие-либо изменения в любой из своих файлов и нажму gulp, он сгенерирует новый объединенный и минимизированный файл с номером версии, например:
<script src = "https://cdn.test.com/bundle-1.0.0-min.js/"></script>
тогда
<script src = "https://cdn.test.com/bundle-1.0.1-min.js/"></script>
Я хочу сделать это с помощью gulp, потому что я уже использую gulp для других целей. И еще одна вещь, если это возможно, то есть ли способ, которым я не указываю версию no на моей html-странице каждый раз, когда я вношу изменения, и моя html-страница каким-то образом сама по себе получает последнюю версию.
Я дал на это ответ. Надеюсь, это решит ваши вопросы. @Просить



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это просто переименование файла в общем. Но на самом деле это не должно быть автоматизированной задачей увеличения номера версии. В противном случае вы быстро получите такую версию, как 1.0.2092, что вам не поможет. Я бы посоветовал прочитать версию из package.json и использовать ее в качестве имени файла. Это должно быть довольно просто, если вы уже работали с gulp.
Если вы не хотите использовать глобальную версию (Запись version) вашего package.json, вы можете добавить собственную запись для вашей версии пакета. Или даже используйте файл, отличный от package.json. Вы даже можете использовать это как конфигурацию, для которой файлы должны быть объединены, чтобы все было в одном месте:
{
"bundle": {
"version": "1.0.1",
"files": [
"path/to/file-one.js",
"another/file.js",
"..."
]
}
}
Просто быстрый пример:
var pkg = require("./package.json");
var gulp = require("gulp");
var rename = require("gulp-rename");
gulp.src(pkg.bundle.files)
.concat("bundle.js")
.pipe(uglify())
.pipe(rename(function(path) {
path.extname = "-" . pkg.bundle.version + "-min" + path.extname;
}))
.pipe(gulp.dest("./"));
Примечание: вместо rename вы можете просто указать имя concat, но мне нравится разделять его. Но для полноты:
.concat("bundle-" + pkg.bundle.version + "-min.js")
О второй части вашего вопроса, чтобы заменить вещи в ваших файлах:
Это будет возможно, если вы создадите свои html-страницы и замените / вставите в них соответствующий путь. Вы можете снова использовать версию package.json, чтобы собрать ее и заменить. Или используйте такие инструменты, как gulp-inject. Этот простой инструмент может добавлять файлы js и css в ваши HTML-шаблоны. Просто создайте область, где они должны быть размещены в файле html, например: <!-- inject:js --><!-- endinject -->. Впоследствии это тоже простые таки gulp:
var pkg = require("./package.json");
var gulp = require("gulp");
var inject = require("gulp-inject");
gulp.src("dev/index.html")
.pipe(inject("bundle-" + pkg.bundle.version + "-min.js"))
.pipe(gulp.dest("prod/"));
спасибо за ответ, но как и когда обновляется версия package.json?
@elsbehr, вот в чем проблема, я не могу сделать это вручную. Я хочу, чтобы все было автоматизировано из-за некоторых ограничений.
так есть ли какой-нибудь gulp npm, который делает это автоматически, например 1.0, 1.1, 1.2. Неважно, что он достигнет 1,1000, потому что мне придется один раз внести изменения в синюю луну, но я не могу сделать это вручную.
Вы не можете увеличить версию в каком-то файле вашего проекта? Почему? Если вы не можете сделать это вручную, как сценарий должен делать это автоматически? И даже в этом случае я бы не стал предлагать вам способ решения этой задачи с помощью автоматизированной задачи, потому что это действительно плохая идея. Но, пожалуйста, расскажите мне подробнее о своей проблеме, почему вы не можете сделать это вручную и почему тогда вы даже хотите увеличить версию? Может у меня есть для тебя другая идея. @Просить
Итак, проблема в том, что я создам задачу gulp, и мой код будет отправлен в dev env, и у меня нет доступа к этому env. Кроме того, я не единственный, кто будет вносить изменения в файлы js, другие разработчики также могут вносить изменения, и никто не хочет снова и снова открывать файл package.json. Но мне нужно управление версиями, потому что нам, возможно, придется использовать разные версии в разных средах.
Есть ли способ открыть файл package.json через задачу gulp и получить оттуда номер версии?
Да, в моем примере вы get номер версии из package.json и используете его для сборки. Но если я вас правильно понял, скорее всего, у вас set версия там. А это плохая идея. После вашего описания проблемы я все еще считаю, что это плохая идея. Более того, я даже больше считаю, что вам действительно не следует этого делать. Если вы работаете с большим количеством разработчиков, вам следует выполнить задачу вручную. Или, если вы работаете с большой группой разработчиков, вам следует сделать какую-то промежуточную стадию ваших изменений, а затем создавать новую версию, когда вы закончите работу. Вот как работает управление версиями. @Просить
Извините, я не понял вашей точки зрения. package.json содержит все зависимости моего проекта от npm, так какую версию мне следует прочитать?