Eu sou muito novo no webpack, descobri que na construção de produção podemos reduzir o tamanho do código geral. Atualmente, o webpack constrói em torno de arquivos de 8 MB e main.js em torno de 5 MB. Como reduzir o tamanho do código na construção de produção? Encontrei um arquivo de configuração de webpack de amostra na internet e configurei para meu aplicativo e executo npm run build
e sua construção começou e gerou alguns arquivos no ./dist/
diretório.
- Ainda assim, esses arquivos são pesados (igual à versão de desenvolvimento)
- Como usar esses arquivos? Atualmente estou usando webpack-dev-server para executar o aplicativo.
arquivo package.json
{
"name": "MyAPP",
"version": "0.1.0",
"description": "",
"main": "src/server/server.js",
"repository": {
"type": "git",
"url": ""
},
"keywords": [
],
"author": "Iam",
"license": "MIT",
"homepage": "http://example.com",
"scripts": {
"test": "",
"start": "babel-node src/server/bin/server",
"build": "rimraf dist && NODE_ENV=production webpack --config ./webpack.production.config.js --progress --profile --colors"
},
"dependencies": {
"scripts" : "", ...
},
"devDependencies": {
"scripts" : "", ...
}
}
webpack.config.js
var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var public_dir = "src/frontend";
var ModernizrWebpackPlugin = require('modernizr-webpack-plugin');
module.exports = {
devtool: 'eval-source-map',
entry: [
'webpack-hot-middleware/client?reload=true',
path.join(__dirname, public_dir , 'main.js')
],
output: {
path: path.join(__dirname, '/dist/'),
filename: '[name].js',
publicPath: '/'
},
plugins: [
plugins
],
module: {
loaders: [loaders]
}
};
webpack.production.config.js
var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var public_dir = "src/frontend";
var ModernizrWebpackPlugin = require('modernizr-webpack-plugin');
console.log(path.join(__dirname, 'src/frontend' , 'index.html'));
module.exports = {
devtool: 'eval-source-map',
entry: [
'webpack-hot-middleware/client?reload=true',
path.join(__dirname, 'src/frontend' , 'main.js')
],
output: {
path: path.join(__dirname, '/dist/'),
filename: '[name].js',
publicPath: '/'
},
plugins: [plugins],
resolve: {
root: [path.resolve('./src/frontend/utils'), path.resolve('./src/frontend')],
extensions: ['', '.js', '.css']
},
module: {
loaders: [loaders]
}
};
Respostas:
Você pode adicionar os plug-ins conforme sugerido por @Vikramaditya. Em seguida, para gerar o build de produção. Você tem que executar o comando
O
-p
diz ao webpack para gerar uma construção de produção. Você precisa alterar o script de construção em package.json para incluir o sinalizador de produção.fonte
src/server/bin/server
. Então você pode descobrir como está servindo os arquivos e talvez alterá-lo. O que eu acho que ele fará é executar o webpack para construir arquivos e depois disponibilizá-los. Dê uma olhada no código deste arquivo.npm install webpack
Depois de observar o número de telespectadores a esta pergunta, decidi concluir uma resposta de Vikramaditya e Sandeep.
Para construir o código de produção, a primeira coisa que você precisa criar é a configuração de produção com pacotes de otimização como,
Então, no arquivo package.json, você pode configurar o procedimento de construção com esta configuração de produção
agora você tem que executar o seguinte comando para iniciar a construção
De acordo com minha configuração de produção, o webpack irá construir o
./dist
diretório de origem .Agora, seu código de IU estará disponível no
./dist/
diretório. Configure seu servidor para servir esses arquivos como ativos estáticos. Feito!fonte
./dist/
diretório?Use estes plug-ins para otimizar sua versão de produção:
A compactação gzip dinâmica do lado do servidor não é recomendada para servir arquivos estáticos do lado do cliente devido ao uso intenso da CPU.
fonte
common.js
.Só estou aprendendo isso sozinho. Vou responder a segunda pergunta:
Em vez de usar webpack-dev-server, você pode apenas executar um "express". use npm install "express" e crie um server.js no diretório raiz do projeto, algo assim:
Em seguida, no package.json, adicione um script:
Por fim, execute o aplicativo:
npm run start
para iniciar o servidorUm exemplo detalhado pode ser visto em: https://alejandronapoles.com/2016/03/12/the-simplest-webpack-and-express-setup/ (o código de exemplo não é compatível com os pacotes mais recentes, mas funcionará com pequenos ajustes)
fonte
Você pode usar o módulo argv npm (instale-o executando npm install argv --save ) para obter parâmetros em seu arquivo webpack.config.js e, para a produção, use a sinalização -p "build": "webpack -p" , você pode adicionar condição no arquivo webpack.config.js como abaixo
E é isso.
fonte
process.argv.indexOf('-p') != -1
argv
no arquivo de configuração do webpack:const argv = require('argv');
Isso vai te ajudar.
fonte
Além da resposta de Gilson PJ:
com
fazer com que ele tente uglificar seu código duas vezes. Consulte https://webpack.github.io/docs/cli.html#production-shortcut-p para obter mais informações.
Você pode corrigir isso removendo o UglifyJsPlugin do array de plug-ins ou adicionando o OccurrenceOrderPlugin e removendo a sinalização "-p". então uma solução possível seria
e
fonte
Se você tiver muitos códigos duplicados em seu webpack.dev.config e em seu webpack.prod.config, poderá usar um booleano
isProd
para ativar determinados recursos apenas em certas situações e ter apenas um único arquivo webpack.config.js.A propósito: O plugin DedupePlugin foi removido do Webpack. Você deve removê-lo de sua configuração.
ATUALIZAR:
Além da minha resposta anterior:
Se você deseja ocultar seu código para lançamento, tente enclosejs.com . Ele permite que você:
Você pode instalá-lo com
npm install -g enclose
fonte