Динамически добавлять номер версии в файлы с удаленным выходом w/grunt
У меня есть файл package.json
с нашим номером версии, например:
{
name: "myproject"
version: "2.0"
}
Моя цель - динамически добавлять номер версии из файла package.json в выходные файлы. Например, в javascript я не хочу вручную обновлять номер версии, но хотелось бы, чтобы после каждой сборки grunt было похоже что-то похожее на это:
/* My Project, v2.0 */
window.myProject = {
version: "2.0"
};
Есть ли простой способ сделать это в моей конфигурации Gruntfile.js?
Ответы
Ответ 1
Я реализовал: https://github.com/erickrdch/grunt-string-replace
В моих исходных файлах css/js я использую текст {{ VERSION }}
, который заменяется номером версии, установленным в файле package.json
. Ниже приведена конфигурация, добавленная в Gruntfile.js
.
'string-replace': {
version: {
files: {
// the files I did string replacement on
},
options: {
replacements: [{
pattern: /{{ VERSION }}/g,
replacement: '<%= pkg.version %>'
}]
}
}
},
pkg: grunt.file.readJSON('package.json'),
Ответ 2
Я думаю, что то, что вы только хотите сделать, это поместить какой-то трюк за то, что страница не может использовать файлы кеша, которые, возможно, есть в браузере, и к настоящему времени единственный способ для этого кросс-браузера - URL-адреса href, такие как "app.v2_2.js" или "app.js? ver = 22". Поэтому я использую этот пакет grpm npm:
https://www.npmjs.org/package/grunt-cache-breaker
По умолчанию он добавляет только параметр в ваш javascript, и почти в том случае, когда вам нужно не использовать кеш, но вы можете настроить, даже если вы измените имя файла в другом процессе grunt. Это только изменяет заголовки HTML на то, что вы хотите.
После установки grunt-cache-breaker добавьте это в свой GruntFile:
// Append a timestamp to 'app.js', 'controllers.min.js' which are both located in 'index.html'
// resulting in the index the call of : href="~/app.js?rel=1415124174159"...
cachebreaker: {
dev: {
options: {
match: ['app.js', 'styles.css']
},
files: {
src: ['dist/index.html']
}
}
},
Затем вы загружаете модули:
grunt.loadNpmTasks('grunt-cache-breaker');
Добавьте задачу, которую вы хотите:
grunt.registerTask('deploy', [
'clean:app',
'copy:views',
'copy:imgs',
'copy:css',
'uglify:app',
'cssmin:app',
'cachebreaker:dev'
]);
И, наконец, запустите действие grunt в командной строке /command
> grunt deploy
Ответ 3
Я бы предложил использовать функцию баннера в grunt-contrib-concat
Ответ 4
это можно сделать также с опцией баннера https://github.com/gruntjs/grunt-contrib-uglify - которая также заботится о минимализации файлов javascript.
Ответ 5
filerev теперь предоставляет этот параметр. Используйте процесс, чтобы манипулировать именем файла, который в противном случае будет суффикс с хешем md5 содержимого файла. Вы можете использовать это, чтобы вставить свою версию в каждый файл, который вы хотите.
Ссылка: https://github.com/yeoman/grunt-filerev
Ответ 6
создайте что-то вроде package.json
в корне вашего проекта
он должен прочитать это, или вы можете сделать что-то вроде
pkg: grunt.file.readJSON('package.json'),
в том, что у вас будет объявление version
, которое, очевидно, соответствует <%= pkg.version %>
, так что у вас есть эта строка в вашем json-выходе, а затем запустите grunt.config.process
, чтобы выполнить замену переменных
сделать что-то подобное для заголовка комментария