Как Magento 2 работает с CSS grunt-autoprefixer


9

Просматривая свежую установку Magento 2 (v2.1.8), я вижу из их Gruntfile.jsи package.jsonфайлов, что Magento использует grunt-autoprefixer

  1. Это здорово, авторефиксаторы CSS действительно полезны. Но я не понимаю, как использовать его с Gruntfile в Magento. У кого-нибудь есть идеи, как это работает?
  2. Кроме того, как это будет работать в производственном режиме в реальной среде? Magento2 не использует компилятор PHP LESS в производственном режиме, а Grunt просто используется для разработки с.

Gruntfile.js

/**
 * Production preparation task.
 */
prod: function (component) {
    var tasks = [
        'less',
        'autoprefixer',
        'cssmin',
        'usebanner'
    ]

package.json

"devDependencies": {
    "glob": "^5.0.14",
    "grunt": "^0.4.5",
    "grunt-autoprefixer": "^2.0.0",

Я побежал, grunt autoprefixerи это, похоже, тоже не работает.

$ grunt autoprefixer
Running "autoprefixer:setup" (autoprefixer) task
Autoprefixer's process() method is deprecated and will removed in next major release. Use postcss([autoprefixer]).process() instead
File setup/pub/styles/setup.css created.

Running "autoprefixer:updater" (autoprefixer) task
Warning: No source files were found. Use --force to continue.

Aborted due to warnings.


Execution Time (2017-10-29 11:12:01 UTC-0)
loading tasks               145ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 30%
loading grunt-autoprefixer  118ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 24%
autoprefixer:setup          216ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 45%
autoprefixer:updater          5ms  ▇▇ 1%
Total 485ms

Ответы:


5
  1. Настройте dev/tools/grunt/configs/autoprefixer.jsonи запустите grunt autoprefixer.
  2. Вам необходимо настроить его вручную в конвейере развертывания, потому что нет никакого способа запустить задачи Grunt из Magento.

выполнение grunt autoprefixerпрервано без завершения с сообщением Autoprefixer's process() method is deprecated and will removed in next major release. Use postcss([autoprefixer]).process() instead. Что говорит о том, что Magento вообще не поддерживает авто-префиксы?
Холли

Даже если Grunt настроен для запуска в конвейере развертывания, он не будет надежным, если пользователь-администратор очистит кэш CSS.
Холли

Кроме того, как можно настроить задачу в .jsonфайле? Не нужно ли Grunt настраивать в .jsфайле
Holly

1. Это работает, это просто предупреждение об устаревании. Несколько строк ниже у вас есть информация об обработанных файлах.
igloczek

2. Кэш не удаляет файлы в pubкаталоге тем, поэтому он на 100% безопасен.
igloczek

5

Пожалуйста, внесите вышеуказанные изменения, я надеюсь, что это сработает.

package.json

{
  "name": "Project",
  "author": "Vendor",
  "description": "Node modules dependencies for local development",
  "version": "2.0.0",
  "license": "(OSL-3.0 OR AFL-3.0)",
  "repository": {
    "type": "git",
    "url": "https://github.com/magento/magento2.git"
  },
  "homepage": "http://magento.com/",
  "devDependencies": {
    "autoprefixer": "^7.1.1",
    "glob": "^5.0.14",
    "grunt": "^0.4.5",
    "grunt-banner": "^0.4.0",
    "grunt-contrib-clean": "^0.6.0",
    "grunt-contrib-connect": "^0.9.0",
    "grunt-contrib-cssmin": "^0.10.0",
    "grunt-contrib-imagemin": "^0.9.2",
    "grunt-contrib-jasmine": "^0.8.1",
    "grunt-contrib-less": "^0.12.0",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-eslint": "17.3.1",
    "grunt-exec": "^0.4.6",
    "grunt-jscs": "2.2.0",
    "grunt-postcss": "^0.8.0",
    "grunt-replace": "^0.9.2",
    "grunt-styledocco": "^0.1.4",
    "grunt-template-jasmine-requirejs": "^0.2.3",
    "grunt-text-replace": "^0.4.0",
    "imagemin-svgo": "^4.0.1",
    "load-grunt-config": "^0.16.0",
    "morgan": "^1.5.0",
    "node-minify": "^1.0.1",
    "path": "^0.11.14",
    "serve-static": "^1.7.1",
    "strip-json-comments": "^1.0.2",
    "time-grunt": "^1.0.0",
    "underscore": "^1.7.0"
  },
  "engines": {
    "node": ">=0.10.0"
  }
}

postcss.js

/**
 * PostCSS autoprefixer initialisation
 *
 * Docs: https://github.com/postcss/autoprefixer
 * Config: dev/tools/grunt/configs/postcss.json
 * Usage: grunt autoprefixer:themename [--verbose] [--debug]
 * To do: load src from themes.js
 *
 * @param grunt
 */

module.exports = function(grunt) {
    grunt.loadNpmTasks('grunt-postcss');

    grunt.registerTask('autoprefixer', function (target) {
        var currentTarget = target || 'dist';

        /*** configuration tweaks ***/
        var config = grunt.config.get('postcss');

        // set 'processors' options (not possible to set function in json config)
        config['options'].processors = [require('autoprefixer')({browsers: ['last 2 versions']})];

        // apply theme source and destination dynamically
        if (target) {
            config[target] = {
                src: ['pub/static/frontend/*/'+target+'/*/css/*.css']
            };
        }
        grunt.config.set('postcss', config);

        grunt.option('force', true);
        grunt.task.run('postcss:'+currentTarget);
    });
};

postcss.json

{
    "options": {
        "map": true
    },
    "dist": {
      "src": ["pub/static/frontend/*/*/*/css/*.css"]
    }
}

После настройки над файлами, запустите grunt autoprefixer


Вы должны отправить это как пиар в ядро, заменив текущую устаревшую настройку
igloczek

0

Чтобы быть действительно понятным для всех: postcss.js & postcss.json - перейдите в / dev / tools / grunt / configs package.json - в корне сайта - просто проверьте, что в нем есть авторефиксер под devDependencies

После этого запустите exec / less / watch / setup обычным способом.

Затем зайдите на свой веб-сайт в браузере, чтобы создать файлы кэша CSS.

затем запустите: grunt autoprefixer

это проверит получившиеся css файлы и добавит -webkit- и другую поддержку браузера

Это хорошее исправление для разработки, но я не нашел способа использовать это в производстве.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.