Skip to content

Instantly share code, notes, and snippets.

@ricardocanelas
Last active October 30, 2017 20:27
Show Gist options
  • Save ricardocanelas/e99301c0f6cae63b3c79ec74ebdbca89 to your computer and use it in GitHub Desktop.
Save ricardocanelas/e99301c0f6cae63b3c79ec74ebdbca89 to your computer and use it in GitHub Desktop.
[NOTE] Webpack 3.0

WEBPACK

SOLUTIONS

import .min files

LOADERS

All Loaders: https://webpack.js.org/loaders/#src/components/Sidebar/Sidebar.jsx

extract-text-webpack-plugin

Description: Extract text from bundle into a file.

Link: https://github.com/webpack-contrib/extract-text-webpack-plugin

Tips: https://stackoverflow.com/questions/42058357/webpack2-not-understanding-import-statement-in-my-sass-files-how-to-compile-sa/42102403#42102403

Example:

yarn add --dev extract-text-webpack-plugin style-loader css-loader
module: {
    rules: [
        {
            test: /\.css$/,
            include: join(__dirname, 'src'),
            use: ExtractTextPlugin.extract({
                fallback: 'style-loader',
                use: 'css-loader'
            })
        }
    ]
},

plugins: [
    new ExtractTextPlugin({
        filename: '[name]-[hash].css'
    })
],

Extrar o textos em um arquivo

style-loader

Description: Adds CSS to the DOM by injecting a < style > tag.

Link: https://github.com/webpack-contrib/style-loader

Example:

yarn add --dev style-loader
//..
module: {
  rules: [{
      test: /\.css$/,
      include: /src/,
      use: ['style', 'raw'] 
      // começa carregar da direita para esquerda.
      // raw --> vai pegar o conteúdo e gerar uma string.
      // style --> vai injetar dentro de uma <style> elemento.
  }]
}

css-loader

Description: Replace the raw-loader

Description-pt: parseia os arquivos css (dos imports), resolve todos os '@' ou url para background.. como se fosse um 'import' no javascript ou 'require' do NodeJS.. Ou seja tenta resolver o path.

Link: https://github.com/webpack-contrib/css-loader

file-loader

Description-pt: os arquivos que você usa no CSS, você pode usar o 'file-loader' para exportar em um arquivo externo.

Link https://github.com/webpack-contrib/file-loader

module: {
    rules: [{
        test: /\.(txt|jpg|svg|png|ico|gif|tff|woff|woff2)$/,
        include: join(__dirname, 'src'),
        use: {
            loader: 'file-loader',
            query: {
                name: '[path][name]-[hash:8].[ext]'
            }
        }
    }]
}

url-loader

https://github.com/webpack-contrib/url-loader

Funciona de uma forma parecida com o 'file-loader', e utilizado o 'file-loader' como fallback. Url-loader gera uma url do tipo base64

raw-loader

https://github.com/webpack-contrib/raw-loader

Para pegar o conteúdo interno de um arquivo. Por exemplo: arquivos .txt, .csv, etc.

standard-loader

https://github.com/standard/standard-loader

É um loader para Lint, que segue o estilo do JavaScript Standard Style (https://github.com/standard/standard), assim todos os programadores podem trabalhar usando o mesmo estilo de programação.

  • babel-eslint
standardPreLoader: {
    use: {
        loader: 'standard-loader',
        options: {
            parser: 'babel-eslint'
            // na versão do Webpack 2.0
            // pare entender aquelas entrada de import()
            // que importa dinamicamente
            // provalmente na versão 3.0 não há necessidade desse parser.
        }
    }
}

PLUGINS

webpack-bundle-analyzer

https://github.com/webpack-contrib/webpack-bundle-analyzer

Automaticamente cria uma pagina para visualizar os tamanhos dos arquivos.

html-webpack-plugin

https://github.com/jantimon/html-webpack-plugin/

Com este plugin você pode criar um templateHtml e fazer com que gere todos os arquivos javascript e css automaticamente.

OUTROS

tree-shaking

Pega o 'import' da sua aplicação, e se por acaso você não estiver utilizando o código que você importou ou alguma library estiver importando algo que você não utiliza o Webpack não adiciona no builder final.

Primeira coisa que a gente precisa fazer é não deixar transformar o modulos (pq ele transformar o import e o export em required em CommonJs e modulo export... se não o Webpack não consegue fazer o 'tree shaking').. o Webpack só consegue fazer o 'tree shaking' usando o ES2015

.babelrc

{
    'presents': [
        ['es2015', { "modules": false}], // primeiro parametro é o nome do plugin, segundo é parametros
        'stage-0',
        'react']
}

BABEL

babel-preset-env

Estão incluso os ES6, ES7, ES8...

babel-preset-stage-0

É as ultimas feature do ES's

babel-plugin-transform-runtime

Se for usar o Async & Await você vai precisar desse plugin. https://tableless.com.br/entendendo-o-async-e-o-await-em-javascript/

Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals.

Example:

.babelrc

{
    'presents': [
        ['es2015', { "modules": false}], 'stage-0', 'react'],
    'plugins': [
        'react-hot-loader/babel',
        ['transform-runtime', {
            'helpers': false,
            'polyfill': false,
            'regenerator': true
        }]
    ]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment