Подтвердить что ты не робот

Динамически добавлять номер версии в файлы с удаленным выходом w/grunt

У меня есть файл package.json с нашим номером версии, например:

{
    name: "myproject"
    version: "2.0"
}

Моя цель - динамически добавлять номер версии из файла package.json в выходные файлы. Например, в javascript я не хочу вручную обновлять номер версии, но хотелось бы, чтобы после каждой сборки grunt было похоже что-то похожее на это:

/* My Project, v2.0 */
window.myProject = {
    version: "2.0"
};

Есть ли простой способ сделать это в моей конфигурации Gruntfile.js?

4b9b3361

Ответ 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, чтобы выполнить замену переменных

сделать что-то подобное для заголовка комментария