Je suis très nouveau dans Webpack, j'ai trouvé que dans la version de production, nous pouvons réduire la taille du code global. Actuellement, Webpack génère environ 8 Mo de fichiers et main.js environ 5 Mo. Comment réduire la taille du code en production? J'ai trouvé un exemple de fichier de configuration Webpack sur Internet et j'ai configuré pour mon application et je l'ai exécuté npm run build
et sa construction a commencé et il a généré des fichiers dans le ./dist/
répertoire.
- Pourtant, ces fichiers sont lourds (comme la version de développement)
- Comment utiliser ces fichiers? Actuellement, j'utilise webpack-dev-server pour exécuter l'application.
fichier 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]
}
};
Réponses:
Vous pouvez ajouter les plugins comme suggéré par @Vikramaditya. Ensuite, pour générer la version de production. Vous devez exécuter la commande
Le
-p
Webpack indique qu'il doit générer une version de production. Vous devez modifier le script de construction dans package.json pour inclure l'indicateur de production.la source
src/server/bin/server
. Ensuite, vous pouvez comprendre comment il sert les fichiers et peut-être le modifier. Ce que je pense qu'il va faire, c'est exécuter webpack pour créer des fichiers et les servir. Jetez un œil au code de ce fichier.npm install webpack
Après avoir observé le nombre de téléspectateurs à cette question, j'ai décidé de conclure une réponse de Vikramaditya et Sandeep.
Pour construire le code de production, la première chose que vous devez créer est la configuration de production avec des packages d'optimisation comme,
Ensuite, dans le fichier package.json, vous pouvez configurer la procédure de construction avec cette configuration de production
maintenant vous devez exécuter la commande suivante pour lancer la construction
Selon ma configuration de construction de production, Webpack construira la source dans le
./dist
répertoire.Maintenant, votre code d'interface utilisateur sera disponible dans l'
./dist/
annuaire. Configurez votre serveur pour servir ces fichiers en tant qu'actifs statiques. Terminé!la source
./dist/
répertoire?Utilisez ces plugins pour optimiser votre version de production:
La compression gzip dynamique côté serveur n'est pas recommandée pour servir des fichiers statiques côté client en raison d'une utilisation intensive du processeur.
la source
common.js
.J'apprends ça moi-même. Je vais répondre à la deuxième question:
Au lieu d'utiliser webpack-dev-server, vous pouvez simplement lancer un "express". utilisez npm install "express" et créez un server.js dans le répertoire racine du projet, quelque chose comme ceci:
Ensuite, dans le package.json, ajoutez un script:
Enfin, lancez l'application:
npm run start
pour démarrer le serveurUn exemple détaillé peut être vu sur: https://alejandronapoles.com/2016/03/12/the-simplest-webpack-and-express-setup/ (l'exemple de code n'est pas compatible avec les derniers packages, mais cela fonctionnera avec de petits ajustements)
la source
Vous pouvez utiliser le module argv npm (installez-le en exécutant npm install argv --save ) pour obtenir des paramètres dans votre fichier webpack.config.js et comme pour la production, vous utilisez -p flag "build": "webpack -p" , vous pouvez ajouter une condition dans le fichier webpack.config.js comme ci-dessous
Et c'est tout.
la source
process.argv.indexOf('-p') != -1
argv
dans le fichier de configuration du webpack:const argv = require('argv');
Cela vous aidera.
la source
En plus de la réponse de Gilson PJ:
avec
car il essaie de modifier votre code deux fois. Voir https://webpack.github.io/docs/cli.html#production-shortcut-p pour plus d'informations.
Vous pouvez résoudre ce problème en supprimant UglifyJsPlugin de plugins-array ou en ajoutant OccurrenceOrderPlugin et en supprimant le drapeau "-p". donc une solution possible serait
et
la source
Si vous avez beaucoup de code dupliqué dans votre webpack.dev.config et votre webpack.prod.config, vous pouvez utiliser un booléen
isProd
pour activer certaines fonctionnalités uniquement dans certaines situations et n'avoir qu'un seul fichier webpack.config.js.Au fait: le plugin DedupePlugin a été supprimé de Webpack. Vous devez le supprimer de votre configuration.
METTRE À JOUR:
En plus de ma réponse précédente:
Si vous souhaitez masquer votre code pour la publication, essayez enclosejs.com . Il vous permet de:
Vous pouvez l'installer avec
npm install -g enclose
la source