J'essaie d'utiliser webpack-4 pour obtenir la version de production de react (le projet n'est pas créé avec l'application Create React), mais sans succès. Mon projet utilise du typographie et utilise ts-loader et utilise la version de React 15.6.2.
Le fichier de configuration actuel du webpack
const path = require("path"); const webpack = require("webpack"); const TerserPlugin = require('terser-webpack-plugin'); var config = { entry: ['./lib/tproj/js/index.ts'], output: { filename: './dist/tproj/js/bundle.js' }, resolve: { extensions: ['.webpack.js', '.web.js', '.ts', '.tsx', '.js', '.json'] }, module: { rules: [ { test: /\.tsx?$/, exclude: [ /lib\/tests/, /lib\/tproj\/elasticsearch/, /lib\/tproj\/expressserver/ ], loader: "ts-loader" }, { test: /\.css$/, use: ['style-loader', 'css-loader'], } ] }, mode: 'production', optimization: { minimize: true, minimizer: [new TerserPlugin()], splitChunks: { chunks: 'all', } } }; module.exports = (env, argv) => { if (argv.mode === 'development') { config.devtool = 'source-map'; } if (argv.mode === 'production') { config.devtool = 'false'; } return config; } ;
J'ai essayé de le modifier comme suit ça ne marche toujours pas.
const path = require("path"); module.exports = { entry: ['./lib/tproj/js/index.ts'], output: { filename: './dist/tproj/js/bundle.js' }, devtool: "source-map", resolve: { extensions: ['.webpack.js', '.web.js', '.ts', '.tsx', '.js', '.json'] }, module: { rules: [ { test: /\.tsx?$/, exclude: [ /lib\/tests/, /lib\/tproj\/elasticsearch/, /lib\/tproj\/expressserver/ ], loader: "ts-loader" }, { test: /\.js$/, enforce: "pre", loader: "source-map-loader" } ] } };
Encore un débutant dans le webpack et React. Merci d'avance pour toute aide ou suggestion.
4 Réponses :
Dans la configuration de votre pack Web, ajoutez ceci au tableau des plugins.
var config = { entry: ['./lib/tproj/js/index.ts'], output: { filename: './dist/tproj/js/bundle.js' }, resolve: { extensions: ['.webpack.js', '.web.js', '.ts', '.tsx', '.js', '.json'] }, module: { rules: [ { test: /\.tsx?$/, exclude: [ /lib\/tests/, /lib\/tproj\/elasticsearch/, /lib\/tproj\/expressserver/ ], loader: "ts-loader" }, { test: /\.css$/, use: ['style-loader', 'css-loader'], } ] }, mode: 'production', optimization: { minimize: true, minimizer: [new TerserPlugin()], splitChunks: { chunks: 'all', } }, plugins: [ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify('production') } }) ] };
Ceci définit la variable d'environnement appropriée pour react pour exécuter la version de production.
new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify('production') } })
mode: 'production'
définit process.env.NODE_ENV
à production
. Regardez-le ici webpack.js.org/configuration/mode/#usage
Merci pour toutes les suggestions et aide les gars, le problème était que le fichier bundle.js n'était pas créé, j'avais récemment mis à jour la version de webpack vers 4
Donc au lieu de
output: { path: path.resolve(__dirname, "./dist/tproj/js/"), filename: "bundle.js", },
Utiliser cela a fonctionné pour moi
output: { filename: './dist/tproj/js/bundle.js' },
Assurez-vous que le bundle.js est modifié lorsque vous exécutez webpack
Assurez-vous simplement que vous exécutez webpack avec la commande suivante:
webpack --mode = production
?@ luke-webdev oui c'est vrai .. J'exécute webpack avec --mode = production