Soy muy nuevo en webpack, descubrí que en la compilación de producción podemos reducir el tamaño del código general. Actualmente, el paquete web tiene alrededor de 8 MB de archivos y main.js alrededor de 5 MB. ¿Cómo reducir el tamaño del código en la construcción de producción? Encontré un archivo de configuración de paquete web de muestra de Internet y lo configuré para mi aplicación y lo ejecuté npm run build
y comenzó a compilarse y generó algunos archivos en el ./dist/
directorio.
- Aún así, estos archivos son pesados (igual que la versión de desarrollo)
- ¿Cómo utilizar estos archivos? Actualmente estoy usando webpack-dev-server para ejecutar la aplicación.
archivo 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]
}
};
Respuestas:
Puede agregar los complementos como lo sugiere @Vikramaditya. Luego, para generar la construcción de producción. Tienes que ejecutar el comando
Le
-p
dice al paquete web que genere una compilación de producción. Debe cambiar el script de compilación en package.json para incluir la marca de producción.fuente
src/server/bin/server
. Entonces puede averiguar cómo está sirviendo los archivos y tal vez cambiarlo. Lo que creo que hará es ejecutar el paquete web para compilar archivos y luego servirlos. Eche un vistazo al código de este archivo.npm install webpack
Después de observar la cantidad de espectadores a esta pregunta, decidí concluir una respuesta de Vikramaditya y Sandeep.
Para construir el código de producción, lo primero que debe crear es la configuración de producción con paquetes de optimización como,
Luego, en el archivo package.json puede configurar el procedimiento de compilación con esta configuración de producción
ahora tienes que ejecutar el siguiente comando para iniciar la compilación
Según mi configuración de compilación de producción, el paquete web compilará la fuente en el
./dist
directorio.Ahora su código de IU estará disponible en
./dist/
directorio. Configure su servidor para que sirva estos archivos como activos estáticos. ¡Hecho!fuente
./dist/
directorio?Utilice estos complementos para optimizar su construcción de producción:
La compresión gzip dinámica del lado del servidor no se recomienda para entregar archivos estáticos del lado del cliente debido al uso intensivo de la CPU.
fuente
common.js
.Solo estoy aprendiendo esto yo mismo. Responderé a la segunda pregunta:
En lugar de utilizar webpack-dev-server, puede ejecutar un "express". use npm install "express" y cree un server.js en el directorio raíz del proyecto, algo como esto:
Luego, en package.json, agregue un script:
Finalmente, ejecute la aplicación:
npm run start
para iniciar el servidorSe puede ver un ejemplo detallado en: https://alejandronapoles.com/2016/03/12/the-simplest-webpack-and-express-setup/ (el código de ejemplo no es compatible con los últimos paquetes, pero funcionará con pequeños retoques)
fuente
Puede usar el módulo argv npm (instálelo ejecutando npm install argv --save ) para obtener parámetros en su archivo webpack.config.js y para la producción, use -p flag "build": "webpack -p" , puede agregue la condición en el archivo webpack.config.js como se muestra a continuación
Y eso es.
fuente
process.argv.indexOf('-p') != -1
argv
en el archivo de configuración del paquete web:const argv = require('argv');
Esto te ayudara.
fuente
Además de la respuesta de Gilson PJ:
con
porque intenta fechar su código dos veces. Consulte https://webpack.github.io/docs/cli.html#production-shortcut-p para obtener más información.
Puede solucionar este problema eliminando UglifyJsPlugin de plugins-array o agregando OccurrenceOrderPlugin y eliminando el indicador "-p". así que una posible solución sería
y
fuente
Si tiene mucho código duplicado en su webpack.dev.config y su webpack.prod.config, puede usar un booleano
isProd
para activar ciertas funciones solo en ciertas situaciones y solo tener un solo archivo webpack.config.js.Por cierto: el complemento DedupePlugin se eliminó de Webpack. Deberías eliminarlo de tu configuración.
ACTUALIZAR:
Además de mi respuesta anterior:
Si desea ocultar su código para su publicación, pruebe enclosejs.com . Te permite:
Puedes instalarlo con
npm install -g enclose
fuente