Como o Magento 2 funciona com CSS grunt-autoprefixer

9

Observando uma nova instalação do Magento 2 (v2.1.8), vejo nos arquivos Gruntfile.jse deles package.jsonque o Magento está usando o grunt-autoprefixer

  1. Isso é ótimo, os autoprefixers CSS são realmente úteis. Mas não consigo ver como usá-lo com o Gruntfile do Magento, alguém tem uma idéia de como funciona?
  2. Além disso, como isso funcionaria no modo de produção em um ambiente ativo? O Magento2 não usa um compilador PHP LESS no modo de produção, enquanto o Grunt é usado apenas para o desenvolvimento.

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",

Eu corri grunt autoprefixere também não parece funcionar.

$ 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
Azevinho
fonte

Respostas:

5
  1. Personalize dev/tools/grunt/configs/autoprefixer.jsone execute grunt autoprefixer.
  2. Você precisa configurá-lo manualmente em seu pipeline de implantação, pois não há como executar tarefas do Grunt no Magento.
igloczek
fonte
executando grunt autoprefixerabortado sem concluir com a mensagem Autoprefixer's process() method is deprecated and will removed in next major release. Use postcss([autoprefixer]).process() instead. O que sugere que o Magento não suporta prefixação automática?
Holly
Mesmo que o Grunt estivesse configurado para ser executado no pipeline de implantação, não seria confiável se um usuário administrador limpasse o cache CSS.
Holly
Além disso, como é possível configurar uma tarefa difícil em um .jsonarquivo? O Grunt não precisa ser configurado em um .jsarquivo
Holly
1. Funciona, isso é apenas um aviso de reprovação. Poucas linhas abaixo você tem informações sobre arquivos processados.
igloczek
2. O cache não remove arquivos no pubdiretório de temas, por isso é 100% seguro.
igloczek
5

Por favor, execute as alterações acima, espero que funcione bem.

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"]
    }
}

Após a instalação dos arquivos acima, execute grunt autoprefixer

gelanivishal
fonte
Você deve enviar este como um PR para o núcleo, substituindo configuração ultrapassada atual
igloczek
0

Para ser realmente claro para todos: postcss.js & postcss.json - acesse / dev / tools / grunt / configs package.json - na raiz do site - verifique se ele inclui o autoprefixer em devDependencies

Uma vez feito, execute exec / less / watch / setup da maneira usual.

Em seguida, acesse seu site em um navegador para criar os arquivos de cache CSS.

em seguida, execute: grunt autoprefixer

isso verificará os arquivos css resultantes e adicionará o -webkit- e outro suporte ao navegador

Essa é uma boa correção para o desenvolvimento, mas não encontrei uma maneira de usar isso na produção.

user2864591
fonte