webpack创建一个项目(2)

一.基础知识

处理css兼容性

1.安装命令
npm install --save-dev autoprefixer postcss-loader
2.在webpack.config.js中配置

//处理css兼容性
let postCss=require('autoprefixer')({
    
    
    "overrideBrowserslist": [
        'last 10 Chrome versions',
        'last 5 Firefox versions',
        'Safari >= 6',
        'ie> 8'
    ]
});
module.exports={
    
    
	 module: {
    
    
        rules: [
            {
    
    
                test:/\.css$/,
                use:[
                    MiniCssExtractPlugin.loader,//都放到了上面的main.css里面
                    {
    
    
                        loader:"css-loader"
                    },
                    {
    
    //处理css兼容性
                        loader:'postcss-loader',
                        options: {
    
    
                            plugins:[
                                postCss
                            ]
                        }
                    }
                ]
            }
        ]
    }
}

css和js压缩

css压缩
1.执行命令
npm install --save optimize-css-assets-webpack-plugin
2.在webpack.config.js中配置

let OptimizeCss=require('optimize-css-assets-webpack-plugin');
//css压缩
module.exports={
    
    
//优化项启动后mode模式代码压缩不再生效,必须配置js压缩插件
	optimization:{
    
    
		minimizer:[
			new OptimizeCss()//优化css
		]
	}
}

js压缩
1.去掉
mode:'production'
由于这种生产模式在后面的多页面配置中可能会失效。因此压缩时最好使用js压缩。
2.执行命令
npm install --save uglifyjs-webpack-plugin
3.在webpack.config.js中配置

let UglifyjsPlugin=require('uglifyjs-webpack-plugin');
module.exports={
    
    
	optimization:{
    
    
		minimizer:[
			new UglifyjsPlugin({
    
    
				cache:true,
				//是否用缓存
				parallel:true,
				//是否并发打包
				sourceMap:true
				//es6映射为es5需要用
			})
		]
	}
}

图片等资源处理

1.安装命令
npm install --save-dev url-loader file-loader
2.在webpack.config.js文件中编写

module:{
    
    
	rules:[{
    
    
		test:/\.(png|jpg|gif|jpeg)$/,
		use:{
    
    
			loader:"url-loader",
			//file-loader加载图片,url-loader图片小于多少k用base64显示
			options:{
    
    
				limit:100*1024,
				//小于100k用base64
				outputPath:'static/images'
				//build之后的目录分类
			}
		}
	}]
}

3.在index.js里面使用
(暂时用es5的语法)
url-loader版本在3.0以下的写法

var image=new Image();
image.src=require('./assets/images/1.jpg');
document.body.appendChild(image);

url-loader版本在3.0以上的写法

var ima=new Image();
ima.src=require('./assets/images/img1.jpg').default;
document.body.appendChild(ima);

综合一下:无论是url-loader为多少都可以使用这种方式

import logo from './assets/images/img1.jpg';
var ima=new Image();
ima.src=logo;
document.body.appendChild(ima);

es6转es5

1.安装babel-loader
npm install --save babel-loader @babel/core @babel/preset-env @babel/plugin-proposal-class-properties @babel/plugin-transform-runtime @babel/runtime

@babel/core:babel核心文件
@babel/preset-env:es6转es5(低级)
@babel/plugin-proposal-class-properties:支持es6,class Goods 类语法
@babel/runtime:编译模块的工具函数
@babel/plugin-transfom-runtime:es6转es5时babel会需要一些辅助函数,例如_extend。这样文件多的时候,项目就会很大。所以babel提供了transform-runtime会将这些辅助函数"搬"到一个单独的模块babel-runtime中。这样做能减小项目文件的大小。

2.在webpack.config.js中配置

rules:[{
    
    
	test:/\.(js|jsx)$/,
	//支持require('*.js')或者('*.jsx')文件
	use:{
    
    
		loader:'babel-loader',
		options:{
    
    
			presets:[
				'@babel/preset-env'
			],
			plugins:[
				'@babel/plugin-proposal-class-properties',
				'@babel/plugin-transform-runtime'
			]
		}
	},
	include:path.resolve(__dirname,'src'),
	//需要转化的文件夹
	exclude:/node_modules/
	//排除转换的文件夹
}]

在这里插入图片描述

用webpack搭建react项目

方式一:自己搭建一个webpack项目

执行完前面的步骤后再执行此步骤
1.安装所需模块

安装react模块: npm i react react-dom --save
安装react的解析模块: npm i babel-preset-react --save-dev
安装所需要的babel:
npm install babel-loader@next @babel/core @babel/preset-react @babel/runtime --save

2.配置webpack.config.js

{
    
    
	test:/\.(js|jsx)$/,
	use:{
    
    
		loader:'babel-loader',
		options:{
    
    
			presets:[
				'@babel/preset-env','@babel/preset-react'
				//增加@babel/preset-react
			]
		}
	}
}

3.在index.js中编写代码

import React from 'react'
import ReactDOM from 'react-dom'
class App extends React.Component{
    
    
	render(){
    
    
		return(
			<div>Hello React!</div>
		)
	}
}
export default App;
ReactDOM.render(<App></App>,dpcument.getElementById("app"));
方式二:react官方脚手架create-react-app的使用

单页面配置

1.npm install -g create-react-app
2.create-react-app my-app
3.cd my-app
4.npm run eject
5.npm run start

方式三:以外链接的方式引入

在html页面中引入

<script src="https://unpkg.com/react@17/umd/react.development.js" crossorigin></script>
 <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js" crossorigin>

倘若要es6转换es5的话,需要再添加一个script标签

<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/[email protected]/babel.js"></script>

二.遇到的问题

报错一:
在这里插入图片描述
错误原因:资源(asset)和入口起点超过指定文件限制
解决方案:

module.exports={
    
    
	    //关闭 webpack 的性能提示
	    performance: {
    
    
		    hints:false
	    }
	    //或者警告 webpack 的性能提示
	    performance: {
    
    
	    	hints:'warning',
	    	//入口起点的最大体积
	    	maxEntrypointSize: 50000000,
	    	//生成文件的最大体积
	    	maxAssetSize: 30000000,
	    	//只给出 js 文件的性能提示
	    	assetFilter: function(assetFilename) {
    
    
	    		return assetFilename.endsWith('.js');
	    	}
	    }
}

猜你喜欢

转载自blog.csdn.net/qq_44875145/article/details/113179710