gpt4 book ai didi

javascript - 如何在开发模式下减少 webpack 捆绑?

转载 作者:行者123 更新时间:2023-11-29 19:05:44 28 4
gpt4 key购买 nike

我正在尝试为一个 React/Redux 项目创建我自己的 Webpack 配置。配置看起来很好,但是包的大小很大(在开发模式下,我知道如何在生产模式下减少它)

我的 package.json 看起来像

  "dependencies": {
"react": "15.4.2",
"react-dom": "15.4.2",
"react-hot-loader": "3.0.0-beta.6"
},
"devDependencies": {
"babel-core": "6.24.0",
"babel-loader": "6.4.1",
"babel-preset-react": "6.23.0",
"commitizen": "2.9.6",
"cz-conventional-changelog": "2.0.0",
"html-webpack-plugin": "2.28.0",
"webpack": "2.3.1",
"webpack-bundle-analyzer": "^2.3.1",
"webpack-dev-server": "2.4.2"
}

我的 webpack 配置看起来像

const webpack = require('webpack');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const HtmlWebpackPlugin = require('html-webpack-plugin');

const project = require('./project.config')

const __DEV__ = project.globals.__DEV__;
const __PROD__ = project.globals.__PROD__;
const __TEST__ = project.globals.__TEST__;

const APP_ENTRIES = [project.paths.client('index.js')];

if (__DEV__) {
APP_ENTRIES.unshift(
'react-hot-loader/patch',
`webpack-dev-server/client?http://${project.server_host}:${project.server_port}`,
'webpack/hot/only-dev-server'
)
}

const config = {
devtool: project.compiler_devtool,

entry: APP_ENTRIES,

output: {
path: project.paths.dist(),
filename: `[name].[${project.compiler_hash_type}].js`,
publicPath: project.compiler_public_path,
},

resolve: {
modules: [
project.paths.client(),
'node_modules',
],
},

module: {
rules: [{
test: /\.js?$/,
loader: 'babel-loader',
exclude: /node_modules/,
}],
},

plugins: [
new BundleAnalyzerPlugin(),
new HtmlWebpackPlugin({
template: project.paths.client('index.html'),
hash: false,
filename: 'index.html',
inject: 'body',
}),
],

node: {
fs: 'empty',
net: 'empty',
tls: 'empty'
}
}

if (__DEV__) {
config.plugins.push(
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin());
}

module.exports = config

现在我在运行 webpack-dev-server

时得到了这个输出

Webpack-dev-server output

如您所见,我的包大于 1.3 Mb,但我只使用了几个库。

我试图使用 webpack-bundle-analyser 找出为什么我的包这么大。这是结果

Webpack-bundle-analyser result

看来 reactreadct-dom 是最大的库。

有没有办法在开发模式下减小我的包的大小???我做错了什么吗?

PS:我在 webpack-dev-server 选项中设置了 compress = true,但它并没有减少包的大小。


这里是关于我如何使用webpack-dev-server的更多细节

bin/start.js(我使用 node bin/start.js 运行它)

const webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');

const config = require('../config/webpack.config');
const project = require('../config/project.config');

function runDevServer() {
const devServer = new WebpackDevServer(webpack(config), {
compress: true,
hot: true,
publicPath: project.compiler_public_path,
stats: project.compiler_stats,
watchOptions: {
ignored: /node_modules/
},
});

// Launch WebpackDevServer.
devServer.listen(project.server_port, project.server_host, (err) => {
if (err) {
console.log('Webpack dev server encountered an error', err);
return reject(err);
}
console.log(`Listening at ${project.server_host}:${project.server_port}`);
});
}

runDevServer()

src/index.js(我的应用程序。Home 只是一个返回“Hello world”的组件)

import React from 'react';
import ReactDOM from 'react-dom';

import { AppContainer } from 'react-hot-loader';

import Home from './routes';

const render = () => {
try {
ReactDOM.render(
<AppContainer>
<Home />
</AppContainer>,
document.getElementById('root')
);
} catch (err) {
console.error(err)
}
};

if (module.hot) {
module.hot.accept('./routes', () => render());
}

render()

最佳答案

在开发过程中有一个大包是正常的,1.3MB 仍然很小,通常加载速度应该很快。由于您使用的是 webpack-dev-server,因此每次更改后都不会花时间重新加载。如果您使用 compress = true,您的包大小将是相同的,除了当客户端要求时它将被 gzip 压缩(您应该在网络选项卡中看到 gzip)。我会建议您不要尝试减小开发包的大小,因为它很难调试并且刷新速度较慢。如果你真的想减小尺寸,你可以只缩小和缩小库代码。这是一种非常常见的方法,您基本上将每个库都放在一个名为 vendor.js 的文件中,您将对其进行缩小、丑化等操作。在另一个文件中,bundle.js您将拥有您编写的所有代码。这将大大减少总尺寸。但你必须加载 2 个 js 文件。您还可以为 webpack 2 激活 tree shaking。她是关于 tree shaking 的更多信息.可以引用this answer关于如何单独捆绑 vendor 脚本并阅读更多关于 code splitting here 的信息.但请记住,您的开发包将始终具有更大的尺寸,因为它在调试时非常方便。

关于javascript - 如何在开发模式下减少 webpack 捆绑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43019729/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com