React中配置Webpack

首先关于webpack是干什么的

          (Webpack中有三大特性,转换,打包,包裹任何资源)

webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包裹(package)任何资源(resource or asset)。

在开发web应用时,假如我们没有任何构建工具,会出现以下问题

1.浏览器运行速度缓慢
在我们实际开发中会引入很多的库,当浏览器加载过多的库时,就会导致浏览器响应很慢。

2.浏览器无法理解代码
当我们使用es6,es7或者ts进行开发时,我们会发现浏览器解析不了我们开发的代码,所以我们需要工具来将我们的代码转化成浏览器能识别的语言

一、基本配置
const path = require('path');

module.exports = {
  mode: 'development',
  entry: './foo.js',     一个webpack工程,首先至少要有一个入口

    output属性告诉 webpack 在何处发出它创建的捆绑包以及如何命名这些文件。它默认为主输出 文件和任        
   何其他生成的文件的文件夹
   path与publicPath
   path:用来存放打包后文件的输出目录
   publicPath:指定资源文件引用的目录
   在实际开发中,publicPath是运维为我们配置的前端资源存放的地址,当我们配上publicPath地址后,我 
   们的访问地址就需要带上publicPath
   例:https://www.baidu.com/static/web/login
            
  output: {  
    path: path.resolve(__dirname, 'dist'),
    filename: 'foo.bundle.js',  // 文件名
    当我们需要访问服务器资源的地址时,我们需要配置publicPath
    publicPath: '/static/web/',
  },

    Webpack不仅仅能处理js文件,还能处理css、图片。而且也能将ES6的代码、TypeScript的代码转换为浏览 
    器 可执行的代码。不同的文件需要不同的loader来进行转换,如babel-loader,css-loader,less- 
    loader,scss- loader等这些转换操作都是在module中进行的,如将es6转化为es5:

    module: {
    rules: [
      {
        test: /\.(js)$/,
        use: 'babel-loader'
      }
    ]
  }

  exclude:过滤指定的库
  include:匹配指定的库
  rules: [
		//less样式转css
		{
			test: /(\.css|\.less)$/,
			use: ExtractTextPlugin.extract({
				fallback: "style-loader",
				use: ['css-loader', 'less-loader']
			})
		},
		//svg图片格式转化
		{
			test: /\.svg$/,
			issuer: { test: /\.(js|ts|jsx|tsx)x?$/ },
			use: ['@svgr/webpack']
		},
		//其他语法转es5
		{
			test: /(\.jsx|\.js)$/,
			exclude: /(node_modules|bower_components)/,
			use: ['happypack/loader']
		},
		{
			test: /(\.jsx|\.js)$/,
			include: [path.resolve('node_modules/react-sortablejs')],
			use: ['babel-loader', 'happypack/loader',],
		},
		//sass样式转css
		{
			test: /\.scss$/,
			use: ExtractTextPlugin.extract({
				fallback: "style-loader",
				use: ["css-loader", "sass-loader"]
			})
		},
		//图片转化
		{
			test: /\.(png|svg|jpg|gif|xlsx|pdf)$/,
			use: "url-loader?limit=1024&name=[name].[ext]&outputPath=img/"
		},
	]

    resolve就是去解析配置的模块。通俗来讲就是为模块起别名。
    该配置为非必须,你也可以不用配置它
    这样在某些需要相对路径比较深的模块引入时,可以从这样:
    import container from ‘…/…/…/src/container’
    变为这样:
    import container from ‘@container’

    resolve: {
    alias: {
      '@container': path.resolve(__dirname, "../src/container"),
        }
      }

plugin则可以用于执行范围更广的任务。plugin的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。plugin接口功能极其强大,可以用来处理各种各样的任务。
想要使用一个plugin,你只需要 require() 它,然后把它添加到 plugins 数组中。多数plugin可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个plugin,这时需要通过使用 new 操作符来创建它的一个实例。

    plugins: [
	new HtmlWebpackPlugin({
		filename: "index.html",
		template: "./src/index.ejs",
		favicon: "favicon.ico",
		chunks: ["vendors", "index"]
	}),
  比较重要的插件uglifyjs-webpack-plugin,使用该插件可对代码进行压缩、混淆。
  使用方法:
  new UglifyJSPlugin({
		exclude: /node_modules/,
		parallel: true,
		uglifyOptions: {
			compress: {//其他压缩选项
				arguments: false,
				drop_console: true,   // 控制删除打印
				keep_infinity: true,
				top_retain: true,
			},
			output: {//其他输出选项(默认值已针对最佳压缩进行了优化)
				beautify: false,
				keep_quoted_props: true,
				wrap_iife: true,
			},
			ie8: true,//启用 IE8 支持
			mangle: false,//启用名称修改
			sourceMap: false// 如果要指定源映射选项,请传递对象
		}
	}),

]


通过配置了devServer,我们就能在本地访问我们的测试服务器

devServer: {
	        contentBase: path.resolve(__dirname, '../dist'),
	        disableHostCheck:true,
	        hot: false,
	        hotOnly: false,
	        host: "0.0.0.0",
	        port: 8081,
	        historyApiFallback: true,
	        stats: "errors-only",
	        proxy: [
	            {
	                context: [''],//模块名
	                target: 'www.baidu.com',//服务器域名地址
	                changeOrigin: true,
	                secure: true,//验证 SSL 证书
	            }
	        ]
	    }

    contentBase:告诉服务器从哪里获取资源
disableHostCheck: 设置为 true 时,此选项将绕过主机检查。就是通常我们所说的跨域。
hot:启用 webpack 的模块热替换。当你启用后,webpack会自动帮你添加一个热更新插件,如没有插件是无法进行热更新的
hotOnly:启用热模块替换,无需页面刷新更新.
host:指定使用一个 可以访问静态资源的地址
默认可通过localhost域名访问,如需要通过配置的测试服务器地址访问则设置为0.0.0.0
例如:我如果设置为0.0.0.0,
那么我可以通过proxy属性中target设置的路径访问:www.baidu.com:8081。同域名下所有人都可访问到该地址
如果未设置,则只能通过localhost或者127.0.0.1访问
port:服务端口号。不配置时,默认为8080
historyApiFallback:当匹配的配置文件不存在时,不出现404
proxy:配置后端开发服务器 API,并且在同域名下发送 API 请求

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小萝卜-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值