webpack从0-1打包运行项目

官方文档:Concepts | webpack

目录

一、webpack的基本使用

建立初始文件

二、自动生成html-webpack-plugin插件

三、webpack中处理css文件

四、分离css文件

五、webpack中处理less文件

六、webpack配置图片的加载 (webpack5已弃用,图片直接使用即可加载,无序再进行如下操作。下面的操作针对webpack4)        

七、webpack配置清除dist目录的插件

八、webpack使用babel处理高版本的js语法(import、export等es6语法)

九、webpack-dev-server自动刷新

十、生产环境和开发环境

十一、webpack多入口的配置:多入口多出口

十二、webpack多入口-提取公共模块

十三、webpack处理vue

十四、webpack中路由的配置说明

十五、vue-cli脚手架环境搭建

十六、rem布局-插件postcss-pxtorem的配置

十七、vue-cli配置代理服务器


一、webpack的基本使用

  • 建立初始文件

1、建立一个文件夹demo,用来放我们的项目

2、将新建的文件夹拖入到vscode

3、文件夹下新建目录文件夹dist,用来放我们打包之后的资源

4、文件夹下新建目录文件夹src/main.js,src源代码的位置

5、打开命令行

yarn init -y 

6、安装依赖包(-D将依赖记录成开发依赖,只是开发中需要用的依赖,实际上线不需要的)

yarn add webpack webpack-cli -D

 7、到package.json文件中,配置scripts

  "scripts": {
    "build":"webpack --config webpack.config.js"
  }

 8、新建webpack.config.js文件

const path = require("path");

//配置webpack的配置文件,需要将配置的对象导出,给webpack使用
module.exports = {
  // 1. 入口 entry,从哪个文件开始打包
  entry: "./src/main.js",
  // 2. 出口 output,打包到哪里去
  output: {
    //打包输出的目录(输出的目录必须是一个绝对路径)
    path: path.join(__dirname, "dist"),
    //打包后生成的文件名
    filename: "bundle.js",
  },
  // 3. 模式 mode development未压缩的,production压缩的。平常上线的是用production,但是因为我们现在想要看打包之后的内容,所以暂时先用development
  mode: "development",
};

9、执行配置的scripts脚本 

yarn build

 打包成功

可以看到我们的dist文件夹下,新增了一个bundle.js文件,同时文件内也可以看到我们在main.js中的内容 

二、自动生成html-webpack-plugin插件

1、新建一个文件夹:public,放一些不需额外处理,直接原封不动放入打包中的资源,例如html,网站logo等

此处,我暂时先新建一个index.html

 2、下载(-D将依赖记录成开发依赖,只是开发中需要用的依赖,实际上线不需要的)

yarn add html-webpack-plugin -D

3、在webpack.config.js文件中,引入这个模块:

//引入自动生成html的插件
const HtmlWebpackPlugin = require('html-webpack-plugin')

4、配置

plugins:[
    new HtmlWebpackPlugin({ template:'./public/index.html' })
]

 配置好之后,执行yarn build可以查看到dist文件夹下面多了一个index.html,并且这个Html内引用了我们的打包js文件

三、webpack中处理css文件

参考官方文档中:

  1、在src下新建文件夹css,然后新建文件base.css

2、安装依赖

yarn add style-loader css-loader -D

3、 修改webpack.config.js文件

const path = require("path");
//引入自动生成html的插件
const HtmlWebpackPlugin = require("html-webpack-plugin");

//配置webpack的配置文件,需要将配置的对象导出,给webpack使用
module.exports = {
  // 1. 入口 entry,从哪个文件开始打包
  entry: "./src/main.js",
  // 2. 出口 output,打包到哪里去
  output: {
    //打包输出的目录(输出的目录必须是一个绝对路径)
    path: path.join(__dirname, "dist"),
    //打包后生成的文件名
    filename: "bundle.js",
  },
  // 3. 模式 mode development未压缩的,production压缩的。平常上线的是用production,但是因为我们现在想要看打包之后的内容,所以暂时先用development
  mode: "development",
  //4.配置模块加载规则
  //默认,webpack只认识,json,javascript,不认识其他文件,如果希望打包处理其他文件,需要配置lodar
  module: {
    rules: [
      {
        //正则:匹配所有以css结尾的文件
        test: /\.css$/,
        //实际处理顺序:从右往左,先处理css-loader,再处理style-loader
        //css-loader 让webpack能够识别解析css文件
        //style-loader 通过动态的创建style标签的方式,让解析后的css内容,能够到页面中
        use: ["style-loader", "css-loader"],
      },
    ],
  },
  //5.配置插件,一般放最后
  plugins: [new HtmlWebpackPlugin({ template: "./public/index.html" })],
};

4、在main.js中引入css文件

//导入css
require("./css/base.css");
console.log("======main.js打包测试");

5、 配置好之后,执行yarn build,可以查看到dist文件夹下bundle.js内引用了我们的css文件。并且dist文件夹下index.html浏览审查元素,可以看到css生效。

四、分离css文件

1、css文件夹下再新建一个index.css文件

 2、main.js中引入上面新建的index.css文件

//导入css
require("./css/base.css");
require("./css/index.css");
console.log("======main.js打包测试");

 3、执行yarn build,将dist文件夹下面的index.html拖入到浏览器

两个样式文件都起了作用,但是有两个<style></style>标签。若css样式多,创建的style也多,目前是通过js动态创建的css。

 将css放到了style标签中,请求次数是少了,

但是如果css文件太大的话,也不是太好,所以必须将css分离出来

  • 插件min-css-extract-plugin,这个插件支持webpack4.x
  • 之前的插件extract-text-webpack-plugin对webpack3.x的版本支持(目前已废弃)

4、安装依赖包

yarn add mini-css-extract-plugin -D

5、在webpack.config.js文件中,引入这个模块

// 引入分离css文件的模块
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

6、配置loaders

 将截图中的替换成如下:

module: {
    rules: [
      {
        //正则:匹配所有以css结尾的文件
        test: /\.css$/,
        //实际处理顺序:从右往左,先处理css-loader,再处理style-loader
        //css-loader 让webpack能够识别解析css文件
        //style-loader 通过动态的创建style标签的方式,让解析后的css内容,能够到页面中
        use: [ // 根据官方文档写的,注意'css-loader'的书写位置
            {
                loader: MiniCssExtractPlugin.loader,
                options: {
                    publicPath:'../',
                },
            },
            "css-loader"
        ],
      },
    ],
  },

7、插件的配置

plugins: [
		...
        //定义打包好的文件的存放路径和文件名
        new MiniCssExtractPlugin({
            filename:'css/index.css'
        })
	],

8、yarn build 之后,dist文件夹下面新增了css文件夹,css文件夹下新增了index.css文件

打开index.css文件,发现这个css文件内容为之前src/css下面的base.css和index.css两个文件全部的内容

 然后在浏览器审查元素,发现不再是通过<style>标签引入,而是通过link标签引入

五、webpack中处理less文件

1、src文件夹下再新建一个less文件夹,less文件夹下新建一个header.less文件

 2、打开public/index.html

增加<div class="header"></div>

 3、打开main.js,导入less

 4、下载依赖包(解析less文件需要识别less语法,所以除了less-loader需要额外下载less包)

yarn add less less-loader -D

5、打开webpack.config.js进行配置

//方法一:简单的以style标签放置解析的less
			{
				test: /\.less$/,
				use:['style-loader','css-loader','less-loader']
			}
			//方法二:分离出css内容,以link引入less。两个方法不同时使用
			{
				test: /\.less$/,
				use:[
					//分离出css内容
					{
						loader:MiniCssExtractPlugin.loader,
						options:{
							publicPath:'../',
						},
					},
					'css-loader',
					'less-loader'
				]
			}

方法二比较好,会将我们的所有less文件和所有的css文件内的样式,统一封装到dist/css/index.css文件内

执行yarn build 

六、webpack配置图片的加载 (webpack5已弃用,图片直接使用即可加载,无序再进行如下操作。下面的操作针对webpack4)        

  • webpack4

1、src文件夹下再新建一个imgs文件夹,文件夹下放入两张大小不一样的图片

                 

2、修改header.less(若是webpack5,设置了背景图片之后,直接yarn build会发现,图片都已打包到dist目录下)

.header {
  width: 100%;
  height: 200px;
  //   background-color: pink;
  background: url(../imgs/01.jpg);
}

3、此时需要转换图片的loader,来处理图片的问题,主要用到url-loader和file-loader

注意:url-loader中的部分功能要用到file-loader

下载依赖包

yarn add url-loader file-loader -D

4、 配置loader

图片默认转成base64字符串:审查元素能够看到路径是base64格式

好处就是浏览器不用发请求了,直接可以读取

坏处就是如果图片太大,再转base64就会让图片的体积增大30%左右。所以需要通过options配置选项进行配置limit,可以设置一个临界值,大于这个值会整个文件直接打包到目录中(dist打包文件夹下方会多出一张图片),得到是路径,如果小于这个值,就会转成base64,节约请求的次数

//(3)配置图片文件的解析,i 表示忽视大小写
      {
        test: /\.(png|jpg|gif)$/i,
        use: [
          //url-loader如果不配置,默认都会将文件转成base64字符串的格式
          {
            loader: "url-loader",
            options: {
              limit: 8 * 1024,
            },
          },
        ],
      },

5、 webpack配置图片的输出目录

			{
				test: /\.(png|jpg|gif)$/i,
				use: [
				  //url-loader如果不配置,默认都会将文件转成base64字符串的格式
				  {
					loader: "url-loader",
					options: {
						// 超过8k就不转base64,小于8k才转字符串
					    limit: 8 * 1024,
						// 配置输出的文件名
						name:'[name].[ext]',
						// 配置静态资源的引用路径
						publicPath:'../images/',
						//配置输出的文件目录
						outputPath:'images/'
					},
				  },
				],
			},

6、bundle.js配置文件的输出目录

	output: {
		//打包输出的目录(输出的目录必须是一个绝对路径)
		path: path.join(__dirname, "dist"),
		//打包后生成的文件名
		filename: "js/bundle.js",
	},

 执行yarn build之后,dist下方多一个js文件夹包裹着bundle.js文件。webpack5也是同样的

  • webpack5

1、src文件夹下再新建一个imgs文件夹,文件夹下放入两张大小不一样的图片(具体参考上面)

2、修改header.less,直接yarn build,图片都已打包到dist目录下

.header {
    width: 100%;
    height: 200px;
    // background-color: pink;
    background: url("../imgs/01.jpg");
}

3、配置loader

图片默认打包到目录中(dist打包文件夹下方会多出一张图片)

			{
				// 处理图片资源
				test: /\.(jpg|png|gif)$/i,
				// webpack5中使用assets-module(url-loader已废弃)
				type: 'asset',
				// 超过8k就不转base64,小于8k才转字符串
				parser: {
					dataUrlCondition: {
						maxSize: 8 * 1024
					}
				},
				generator: {
					// 配置输出的文件名,name为原图片的名字,ext为原图片的后缀名。前面加上images/,那么dist目录下会新建一个文件夹images来放置打包后的图片
					filename: 'images/[name][ext]'
				}
			},

  4、执行yarn build之后,dist下方多一个images文件夹包裹着图片

七、webpack配置清除dist目录的插件

1、使用clean-webpack-plugin插件在每次打包前清除下dist文件夹

安装依赖包

yarn add clean-webpack-plugin -D

2、webpack.config.js

// 导入清除插件,可以在每次打包之前,清除dist目录的内容
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

//配置webpack的配置文件,需要将配置的对象导出,给webpack使用
module.exports = {
	...
	module: {
		...
	},
	//5.配置插件,一般放最后
	plugins: [
		...
		//调用清除打包目录插件
		new CleanWebpackPlugin()
	],
};

3、执行yarn build即可

八、webpack使用babel处理高版本的js语法(import、export等es6语法)

babel的介绍=》用于处理高版本js语法的兼容性

1、修改src/main.js

//箭头函数在低版本内不会被识别
const fn = () =>{
    console.log('嘎嘎')
}

 2、yarn build之后,查看dist/js/bundle.js内查看对应的函数,发现还是箭头函数,没有被解析

3、安装包

yarn add -D babel-loader @babel/core @babel/preset-env

4、修改webpack.config.js    (    module: { rules: [内放置如下代码] }     )

			//(4)配置对于高版本js的兼容性处理
			{
				//匹配js
				test:/\.js$/,
				//排除node_modules
				exclude: /(node_modules)/,
				use:{
					loader:'babel-loader',
					options:{
						presets:['@babel/preset-env']
					}
				}
			}

5、yarn build之后,查看dist/js/bundle.js内查看对应的函数,被解析了

 箭头函数变成了普通函数,处理了兼容性

九、webpack-dev-server自动刷新

1、下载

yarn add webpack-dev-server -D

2、修改package.json文件

  "scripts": {
    "build": "webpack --config webpack.config.js",
    "dev": "webpack-dev-server --config webpack.config.js"
  }

3、执行yarn dev (yarn build上线的时候执行一次即可,其他时间建议yarn dev)

执行后显示一个链接,点开可以看到我们当前页面,而且每次修改保存之后,都会自动刷新

 4、webpack-dev-server的配置

module.exports={
    ...
    //配置开发服务器
	devServer:{
		port:3000,//配置端口号3000
		open:true//自动打开浏览器
	}
}

5、 执行yarn dev

自动打开 http://localhost:3000/页面,而且也有保存刷新的作用。

十、生产环境和开发环境

生产环境和开发环境刚好相反,开发环境在本地运行,而生产环境是要产出运行在服务器给用户使用的代码,因此两者的构建目标差异很大,比如打包后的文件在生产环境中要尽可能的小,逻辑代码分离,优化静态资源(压缩图片)等。

因此开发环境和生产环境不能共用一份webpack配置文件,需要分别指定

但是两个环境还是有很多配置可以共用的,比如entry、output、module等,因此可以把公共部分的配置抽离出来放到一个独立的文件然后进行合并,我们可以使用webpack-merge工具进行合并。

注意:entry、output、module这些配置在我们当前示例通用,但未必适合所有项目。

1、安装依赖

yarn add webpack-merge -D

2、拆分webpack.config.js文件,拆分后这个文件就不要了。

新建config文件夹,新建三个文件webpack.base.js、webpack.pro.js、webpack.dev.js

- webpack-demo
    - config        // 存放配置文件的文件夹
        - webpack.base.js    // 公共的配置
        - webpack.dev.js     // 开发环境的配置
        - webpack.pro.js     // 生产环境的配置

 3、webpack.base.js(

注意:更改绝对路径:path: path.join(__dirname, "../dist"),

相对目录的路径不用更改,因为在运行时还是以整个项目根目录运行

将之前的webpack.config.js 文件内,公用部分粘贴过来

// 公共的一些配置
const path = require("path");
//引入自动生成html的插件
const HtmlWebpackPlugin = require("html-webpack-plugin");
// 引入分离css文件的模块
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

// 导入清除插件,可以在每次打包之前,清除dist目录的内容
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

// 配置webpack的配置文件,需要将配置的对象导出,给webpack使用
module.exports = {
	// 入口 entry,从哪个文件开始打包
	entry: "./src/main.js",
	// 出口 output,打包到哪里去
	output: {
		// 打包输出的目录(输出的目录必须是一个绝对路径)
		path: path.join(__dirname, "../dist"),
		// 打包后生成的文件名
		filename: "js/bundle.js",
	},
	// 配置模块加载规则
	// 默认,webpack只认识,json,javascript,不认识其他文件,如果希望打包处理其他文件,需要配置lodar
	module: {
		rules: [
			{
				// 正则:匹配所有以css结尾的文件
				test: /\.css$/,
				// 实际处理顺序:从右往左,先处理css-loader,再处理style-loader
				// css-loader 让webpack能够识别解析css文件
				// style-loader 通过动态的创建style标签的方式,让解析后的css内容,能够到页面中
				use: [ // 根据官方文档写的,注意'css-loader'的书写位置
					{
						loader: MiniCssExtractPlugin.loader,
						options: {
							publicPath:'../',
						},
					},
					"css-loader"
				],
			},
			// 配置less文件的解析
			// 方法一:简单的以style标签放置解析的less
			// {
			// 	test: /\.less$/,
			// 	use:['style-loader','css-loader','less-loader']
			// }
			// 方法二:分离出css内容,以link引入less。两个方法不同时使用
			{
				test: /\.less$/,
				use:[
					// 分离出css内容
					{
						loader:MiniCssExtractPlugin.loader,
						options:{
							publicPath:'../',
						},
					},
					'css-loader',
					'less-loader'
				]
			},
			// (3)配置图片文件的解析,i 表示忽视大小写,webpack4
			// {
			// 	test: /\.(png|jpg|gif)$/i,
			// 	use: [
			// 	  //url-loader如果不配置,默认都会将文件转成base64字符串的格式
			// 	  {
			// 		loader: "url-loader",
			// 		options: {
			// 			// 超过8k就不转base64,小于8k才转字符串
			// 		    limit: 8 * 1024,
			// 			// 配置输出的文件名
			// 			name:'[name].[ext]',
			// 			// 配置静态资源的引用路径
			// 			publicPath:'../images/',
			// 			//配置输出的文件目录
			// 			outputPath:'images/'
			// 		},
			// 		type: 'javascript/auto', //在webpack5中使用旧版功能
			// 	  },
			// 	],
			// },


			{
				// 处理图片资源:webpack5
				test: /\.(jpg|png|gif)$/i,
				// webpack5中使用assets-module(url-loader已废弃)
				type: 'asset',
				// 超过8k就不转base64,小于8k才转字符串
				parser: {
					dataUrlCondition: {
						maxSize: 8 * 1024
					}
				},
				generator: {
					// 配置输出的文件名,name为原图片的名字,ext为原图片的后缀名。前面加上images/,那么dist目录下会新建一个文件夹images来放置打包后的图片
					filename: 'images/[name][ext]'
				}
			},

			// (4)配置对于高版本js的兼容性处理
			{
				// 匹配js
				test:/\.js$/,
				// 排除node_modules
				exclude: /(node_modules)/,
				use:{
					loader:'babel-loader',
					options:{
						presets:['@babel/preset-env']
					}
				}
			}
			
		],
	},
	// 配置插件,一般放最后
	plugins: [
		new HtmlWebpackPlugin({ template: "./public/index.html" }),
        // 定义打包好的文件的存放路径和文件名
        new MiniCssExtractPlugin({
            filename:'css/index.css'
        }),
		// 调用清除打包目录插件
		new CleanWebpackPlugin()
	],
};

 4、webpack.pro.js

src内才可任意使用import和export。src外还是得使用require

// production 生产环境
// 导入公共的配置
const base = require('./webpack.base.js')

// 导入一个用于合并的包
const webpackMerge = require('webpack-merge')

// 导出生产环境的配置
// merge可以传入多个参数,会将多个参数合并成一个对象
// 如果有重复的属性名,后面的对象属性会覆盖前面的
module.exports = webpackMerge.merge(base, {
    // 模式 mode development未压缩的,production压缩的。平常上线的是用production,但是因为我们现在想要看打包之后的内容,所以暂时先用development
	mode: "production"
})

5、webpack.dev.js

// development 开发环境的配置
// 导入公共的配置
const base = require('./webpack.base.js')

// 导入一个用于合并的包
const webpackMerge = require('webpack-merge')

// 导出开发环境的配置
// merge可以传入多个参数,会将多个参数合并成一个对象
// 如果有重复的属性名,后面的对象属性会覆盖前面的
module.exports = webpackMerge.merge(base, {
    // 模式 mode development未压缩的,production压缩的。平常上线的是用production,但是因为我们现在想要看打包之后的内容,所以暂时先用development
	mode: "development",
    //配置开发服务器
	devServer: {
		port:3000,//配置端口号3000
		open:true//自动打开浏览器
	}
})

如上三个代码完成之后,删除之前的webpack.config.js 

6、修改package.json文件

  "scripts": {
    "build": "webpack --config config/webpack.pro.js",
    "dev": "webpack-dev-server --config config/webpack.dev.js"
  }

7、执行yarn build和yarn dev即可

十一、webpack多入口的配置:多入口多出口

多入口需要修改entry配置,在这之前我们都是把src/main.js打包成dist/bundle.js引入到项目中,那如果有多个main.js类型的文件需要引入时,就需要配置多入口

在src下新建两个文件index.js 和about.js

 1、index.js

const app = document.querySelector('#app')
const h1 = document.createElement('h1')
h1.innerHTML = '大家好,我是index.js'
app.appendChild(h1)

 2、about.js

const app = document.querySelector('#app')
const h2 = document.createElement('h2')
h2.innerHTML = '大家好,我是about.js'
app.appendChild(h2)

3、 然后修改config/webpack.base.js

	entry: {
		index:'./src/index.js',
		about:'./src/about.js',
	},
	// 出口 output,打包到哪里去
	output: {
		// 打包输出的目录(输出的目录必须是一个绝对路径)
		path: path.join(__dirname, "../dist"),
		// 打包后生成的文件名
		// filename: "js/bundle.js",
		filename: "js/[name].bundle.js", //[name]指代entry中的键名
	},

4、 yarn build

dist/js下面出现两个js文件

 打开dist/index.html可以看到两个js文件生效了

十二、webpack多入口-提取公共模块

1、安装依赖

yarn add jquery

2、修改index.js和about.js,给他们都加上如下代码

src目录内所以可以使用import,没必要还用require

import $ from 'jquery'
console.log($('div'))

3、执行yarn build

查看打包后的index.bundle.js和about.bundle.js文件源码,会发现他们都把jquery.js打包进去了,这样做的后果不敢想象。所以我们需要把类似公共的依赖模块提取到一个单独的文件中。

4、修改config/webpack.base.js

//其他代码

module.exports = {
    // 其他代码
    // + 提取公共模块配置
    optimization: {
        splitChunks: {
            chunks: 'all' // 提取所有文件的共同模块
        }
    }
}

 5、再次执行yarn build

可以看到当前项目的公共模块jquery的内容已经被打包到一个独立的....bundle.js文件中了,当然这个文件名可以通过配置修改的。

 6、更改公共模块打包后的文件名

//其他代码

module.exports = {
    // 其他代码
    // + 提取公共模块配置
    optimization: {
		cacheGroups: {
			defaultVendors: {
				filename: 'js/common.bundle.js',
			},
		},
        splitChunks: {
            chunks: 'all' // 提取所有文件的共同模块
        }
    }
}

执行yarn build 

 注意:公共模块的大小必须大鱼 30kb 才会被独立打包,jquery的大小是87kb

十三、webpack处理vue

1、安装vue

yarn add vue

2、记得安装插件 

3、 src下新建App.vue

// 使用App组件,渲染index.html中的视图
import Vue from 'vue'
import App from './App.vue'
new Vue({
    el:'#app',
    // 使用vue底层的渲染方法
    // 作用:使用App组件,作为根组件,将来渲染视图
    // 简写:render:h=>h(App)
    // 完整写
    render:function(createElement){
        return createElement(App)
    }
})

4、src/ main.js文件

// 使用App组件,渲染index.html中的视图
import Vue from 'vue'
new Vue({
    el:'#app',
    // 使用vue底层的渲染方法
    // 作用:使用App组件,作为根组件,将来渲染视图
    // 简写:render:h=>h(App)
    // 完整写
    render:function(createElement){
        return createElement(App)
    }
})

5、安装依赖包

yarn add vue-loader vue-template-compiler -D

6、修改webpack.base.js文件

const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
    module:{
        rules: [
            //...其他规则
            {
                test: /\.vue$/,
                loader:'vue-loader'
            }
        ]
    },
    plugins:[
        //请确保引入这个插件!
        new VueLoaderPlugin()
    ]
}

webpack.base.js文件完整代码(包含之前的其他操作,此处先用单入口,单出口) 

// 公共的一些配置
const path = require("path");
//引入自动生成html的插件
const HtmlWebpackPlugin = require("html-webpack-plugin");
// 引入分离css文件的模块
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

// 导入清除插件,可以在每次打包之前,清除dist目录的内容
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

const VueLoaderPlugin = require('vue-loader/lib/plugin')

// 配置webpack的配置文件,需要将配置的对象导出,给webpack使用
module.exports = {
	// 入口 entry,从哪个文件开始打包
	entry: "./src/main.js",
	// entry: {
	// 	index:'./src/index.js',
	// 	about:'./src/about.js',
	// },
	// 出口 output,打包到哪里去
	output: {
		// 打包输出的目录(输出的目录必须是一个绝对路径)
		path: path.join(__dirname, "../dist"),
		// 打包后生成的文件名
		filename: "js/bundle.js",
		// filename: "js/[name].bundle.js", //[name]指代entry中的键名
	},
	// 配置模块加载规则
	// 默认,webpack只认识,json,javascript,不认识其他文件,如果希望打包处理其他文件,需要配置lodar
	module: {
		rules: [
			{
				// 正则:匹配所有以css结尾的文件
				test: /\.css$/,
				// 实际处理顺序:从右往左,先处理css-loader,再处理style-loader
				// css-loader 让webpack能够识别解析css文件
				// style-loader 通过动态的创建style标签的方式,让解析后的css内容,能够到页面中
				use: [ // 根据官方文档写的,注意'css-loader'的书写位置
					{
						loader: MiniCssExtractPlugin.loader,
						options: {
							publicPath:'../',
						},
					},
					"css-loader"
				],
			},
			// 配置less文件的解析
			// 方法一:简单的以style标签放置解析的less
			// {
			// 	test: /\.less$/,
			// 	use:['style-loader','css-loader','less-loader']
			// }
			// 方法二:分离出css内容,以link引入less。两个方法不同时使用
			{
				test: /\.less$/,
				use:[
					// 分离出css内容
					{
						loader:MiniCssExtractPlugin.loader,
						options:{
							publicPath:'../',
						},
					},
					'css-loader',
					'less-loader'
				]
			},
			// (3)配置图片文件的解析,i 表示忽视大小写,webpack4
			// {
			// 	test: /\.(png|jpg|gif)$/i,
			// 	use: [
			// 	  //url-loader如果不配置,默认都会将文件转成base64字符串的格式
			// 	  {
			// 		loader: "url-loader",
			// 		options: {
			// 			// 超过8k就不转base64,小于8k才转字符串
			// 		    limit: 8 * 1024,
			// 			// 配置输出的文件名
			// 			name:'[name].[ext]',
			// 			// 配置静态资源的引用路径
			// 			publicPath:'../images/',
			// 			//配置输出的文件目录
			// 			outputPath:'images/'
			// 		},
			// 		type: 'javascript/auto', //在webpack5中使用旧版功能
			// 	  },
			// 	],
			// },


			{
				// 处理图片资源:webpack5
				test: /\.(jpg|png|gif)$/i,
				// webpack5中使用assets-module(url-loader已废弃)
				type: 'asset',
				// 超过8k就不转base64,小于8k才转字符串
				parser: {
					dataUrlCondition: {
						maxSize: 8 * 1024
					}
				},
				generator: {
					// 配置输出的文件名,name为原图片的名字,ext为原图片的后缀名。前面加上images/,那么dist目录下会新建一个文件夹images来放置打包后的图片
					filename: 'images/[name][ext]'
				}
			},

			// (4)配置对于高版本js的兼容性处理
			{
				// 匹配js
				test:/\.js$/,
				// 排除node_modules
				exclude: /(node_modules)/,
				use:{
					loader:'babel-loader',
					options:{
						presets:['@babel/preset-env']
					}
				}
			},

			{
                test: /\.vue$/,
                loader:'vue-loader'
            }
			
		],
	},
	// 配置插件,一般放最后
	plugins: [
		new HtmlWebpackPlugin({ template: "./public/index.html" }),
        // 定义打包好的文件的存放路径和文件名
        new MiniCssExtractPlugin({
            filename:'css/index.css'
        }),
		// 调用清除打包目录插件
		new CleanWebpackPlugin(),

		new VueLoaderPlugin()
	],
	optimization: {
        splitChunks: {
			cacheGroups: {
				defaultVendors: {
				  filename: 'js/common.bundle.js',
				},
			},
            chunks: 'all' // 提取所有文件的共同模块
        }
    }
};

十四、webpack中路由的配置说明

大部分文件参考十三的文件

1、 src下新建App.vue

<template>
  <div id="app">
      我是vue页面
      <!-- 路由出口 -->
      <router-view></router-view>
  </div>
</template>

<script>
export default {

}
</script>

<style>

</style>

2、 src下新建文件夹views,views文件夹下新建两个文件Home.vue和Login.vue

Home.vue

<template>
  <div class="home">
      这是home组件
  </div>
</template>

<script>
export default {

}
</script>

<style>

</style>

Login.vue

<template>
  <div class="home">
      这是login组件
  </div>
</template>

<script>
export default {

}
</script>

<style>

</style>

3、安装依赖包

yarn add vue-router

4、src下新建文件夹router,router文件夹下新建一个文件index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import Login from '../views/Login.vue'

Vue.use(VueRouter)

const router = new VueRouter({
    routes:[
        //redirect表示重定向
        {path:'/',redirect:'/home'},
        {path:'/home',component:Home},
        {path:'/login',component:Login},
    ]
})

export default router

 5、修改src下main.js,将上面的router文件挂载到实例上

import Vue from 'vue'
import App from './App.vue'
import router from './router'
new Vue({
    el:'#app',
    // 使用vue底层的渲染方法
    // 作用:使用App组件,作为根组件,将来渲染视图
    // 简写:render:h=>h(App)
    // 完整写
    render:function(createElement){
        return createElement(App)
    },
    router
})

最简略的 main.js

// 使用App组件,渲染index.html中的视图
import Vue from 'vue'
import App from './App.vue'
import router from './router'

new Vue({
    render:(h)=>h(App),
    router
}).$mount('#app')

6、yarn dev即可看到默认访问到home组件,路由更换为login时,会跳转到Login组件。一个简短的路由搭建就完成了 

十五、vue-cli脚手架环境搭建

借鉴此网站: 创建一个项目 | Vue CLI

1、命令行

vue create webpack-vue-mobile

2、 手动设置的一些步骤

空格是选中,回车是选择结束

代码风格,一般选择标准,不加分号

最后一个是否保存预设,一般不保存预设

 3、项目新建成功后,对比上一步中,我们自己使用webpack搭建的vue项目

配置集成到node_modules文件夹内了,所以对比我们自己搭建的,会发现没有看到config文件夹

4、yarn serve启动项目,可以看出我们项目新建成功

5、覆盖vue脚手架自带的一些配置

src同级下新建vue.config.js文件,该文件内进行的配置会自动覆盖脚手架。

参考之前的配置即可。

//这里面配置的内容,会覆盖默认的webpack配置
module.exports = {
    devServer: {
		port:3001,//配置端口号3001
		open:true//自动打开浏览器
	}
}

十六、rem布局-插件postcss-pxtorem的配置

结合上面十五中创建的vue脚手架

参考网址: 基于vue-cli3的vue项目移动端样式适配,lib-flexible和postcss-px2rem - 秋风2016 - 博客园

1、安装插件

yarn add lib-flexible postcss-px2rem

2、在public中的index.html中删除meta标签

flexible会为页面根据屏幕自动添加<meta name='viewport'>标签,动态控制initial-scale,maximum-scale,minimum-scale等属性的值。

public中的index.html文件,与我们自己搭建的项目多了如下代码,但是可以直接删除,没啥作用

<noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>

 3、在src/main.js中导入插件包

// 导入rem的js,动态的设置了,不同屏幕的html根元素的font-size
// 1rem根据当前屏幕html  font-size进行转换的
import 'lib-flexible'

 4、配置vue.config.js

//这里面配置的内容,会覆盖默认的webpack配置
module.exports = {
    devServer: {
		port:3001,//配置端口号3001
		open:true//自动打开浏览器
	},
	//rem的配置
	css:{
		loaderOptions:{
			css:{},
			postcss:{
				plugins:[
					require('postcss-px2rem')({
						//适配 375 屏幕,设计图750中量出来的尺寸要 / 2
						//配置成 37.5 是为了兼容  没有适配  rem 布局的第三方 ui 库
						//若后期想适配 360 屏幕,remUnit:36
						remUnit:37.5
					})
				]
			}
		}
	}

}

 5、为了效果更明显,我们删除项目内一些内容

(1)打开App.vue

删除样式和多余内容,仅保留<router-view/>

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<style lang="less">

</style>

(2)删除components、assets两个文件夹

(3)修改router文件夹下index.js

import { createRouter, createWebHashHistory } from 'vue-router'
import Home from '../views/Home.vue'
import About from '../views/About.vue'

const routes = [
  {
    path: '/',
    redirect: '/home'
  },
  {
    path: '/home',
    component: Home
  },
  {
    path: '/about',
    component: About
  },
]

const router = createRouter({
  history: createWebHashHistory(),
  routes
})

export default router

(4)修改views文件夹下Home.vue

<template>
  <div class="home">这是home组件</div>
</template>

<script>
export default {

}
</script>

<style lang="less">
.home{
  width: 200px;
  height: 200px;
  background-color: pink;
}

</style>

(5)修改views文件夹下About.vue 

<template>
  <div class="home">这是about组件</div>
</template>

<script>
export default {

}
</script>

<style>

</style>

(6)yarn serve,然后审查元素

可以发现px都转成rem 

十七、vue-cli配置代理服务器

跨域:域名  端口  协议  不同,就会跨域

比如:前端浏览器,运行代码,localhost:3000/...       请求后台服务器:localhost:8080/... 

webpack的反向代理,可以起一个临时的代理服务器,帮助解决在开发过程中的跨域问题,就算跨域了也能拿到后台的数据

1、安装axios,发送ajax请求

yarn add axios

2、随便找一个别人的请求

比如打开别人的官网,审查network,选择Fetch/XHR,选择一个返回结果较少的get请求,复制链接

3、在我们十六中修改的Home.vue中发送请求

<template>
  <div class="home">这是home组件</div>
</template>

<script>
import axios from 'axios'
export default {
  async created () {
    // 发送ajax请求,获取数据
    // 此处原本复制的链接是:https://c.y.qq.com/splcloud/fcgi-bin/gethotkey.fcg?...   但是我们将 https://c.y.qq.com/splcloud/fcgi-bin 剪切到我们vue.config.js target中
    // 此处链接因为将前面的部分剪切到vue.config.js target中,所以链接前面加上vue.config.js proxy设置的 /music/
    const url = '/music/gethotkey.fcg?_=1637668473586&cv=4747474&ct=24&format=json&inCharset=utf-8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=1&uin=0&g_tk_new_20200303=63876982&g_tk=5381&hostUin=0'
    const res = await axios.get(url)
    console.log('=============res', res)
  }
}
</script>

<style lang="less">
.home{
  width: 200px;
  height: 200px;
  background-color: pink;
}

</style>

4、配置代理(配置vue.config.js文件)

//这里面配置的内容,会覆盖默认的webpack配置
module.exports = {
    devServer: {
		port:3001,//配置端口号3001
		open:true,//自动打开浏览器
		//配置代理服务器,进行代理数据
		proxy:{
			// 将来只要请求的路径,以 /music 开头,都会被代理
			// /music/list    =>https://c.y.qq.com/splcloud/fcgi-bin/list
			'/music':{
				target:'https://c.y.qq.com/splcloud/fcgi-bin/',  //代理的基础路径
				pathRewrite:{'^/music':''}
			}
		}
	},
	//rem的配置
	css:{
		loaderOptions:{
			css:{},
			postcss:{
				plugins:[
					require('postcss-px2rem')({
						//适配 375 屏幕,设计图750中量出来的尺寸要 / 2
						//配置成 37.5 是为了兼容  没有适配  rem 布局的第三方 ui 库
						//若后期想适配 360 屏幕,remUnit:36
						remUnit:37.5
					})
				]
			}
		}
	}

}

5、重新yarn serve启动,即可在打印台看到数据请求成功 

十八、

对我们的react项目进行webpack打包

  • 通过npx create-react-app my-app生成项目my-app,并通过cd定位到该项目下

  • cd到项目目录下,执行如下代码,这个是安装到系统下得,供往后可以以webpack命令打包
cd my-app
npm i webpack webpack-cli -g

报错:-bash: cnpm: command not found

安装cnpm

npm install cnpm -g --registry=https://registry.npm.taobao.org

报错

原因: 执行命令行命令时没有获得管理员权限
解决方案:在命令行前面添加sudo获取管理员权限,输入管理员密码就行
原因: 执行命令行命令时没有获得管理员权限
例如原来的是:  npm install cnpm -g --registry=https://registry.npm.taobao.org
应该该为:sudo npm install cnpm -g --registry=https://registry.npm.taobao.org   再输入密码就行

  • cd到项目目录下,直接安装即可,这个是安装到系统下得,供往后可以以webpack命令打包
cnpm i webpack webpack-cli -g
或者
sudo cnpm i webpack webpack-cli -g
  • 这个是安装到项目依赖里面去,也就是在node_mudule里面
npm i --save-dev webpack webpack-dev-server webpack-cli
  • 安装必要的依赖
npm i --save-dev babel-core babel-loader @babel/preset-env @babel/preset-react html-webpack-plugin
  • package.json

检查package里面的devDependencies

调整package里面的scripts为如下代码

"scripts": {
    "start": "webpack-dev-server --mode development --open --hot",
    "buile": "webpack --mode production"
  },
  • webpack.config.js

根目录新建一个webpack.config.js文件,实例代码如下:

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  //by https://blog.csdn.net/moshowgame
  //当entry是个数组的时候,里面同样包含入口js文件,另外一个参数可以是用来配置webpack提供的一个静态资源服务器,webpack-dev-server。webpack-dev-server会监控项目中每一个文件的变化,实时的进行构建,并且自动刷新页面:
  //当entry是个对象的时候,我们可以将不同的文件构建成不同的文件,按需使用,比如在我的hello页面中只要\引入hello.js即可:
  entry: "./src/index.js",
  //打包後生成的檔案路徑
  output: {
    path: path.join(__dirname, "dist"),
    filename: "index_bundle.js",
  },
  //自动补全,后缀可以省略不写
  //webpack在构建包的时候会按目录的进行文件的查找,resolve属性中的extensions数组中用于配置程序可以自行补全哪些文件后缀:
  //onfiguration.resolve.extensions[0] should be an non-empty string.A non-empty string .请把[]中得''去掉
  resolve: {
    extensions: [".js", ".jsx", ".css", ".scss", ".json"],
    alias: {
      //配置后可以直接用@来表示这个位置,直接应用目录下得文件,是绝对路径
      "@": path.join(__dirname, "./src"),
    },
  },
  //設置 eval 或 SourceMap 屬性,debug 用
  //devtool: 'cheap-module-eval-source-map',
  module: {
    rules: [
      {
        //自動編譯 JSX 或 JS 檔 (require 可載入 JSX 了)
        test: /\.(js|jsx)$/,
        use: { loader: "babel-loader" },
        exclude: /node_modules/,
      },
      //, {
      //     //自動處理 CSS 內的 url 和 @import 的路徑轉換,可以傳入 sourceMap 參數以便 debug
      //     test: /\.css$/,
      //     loader: 'style!css?sourceMap'
      // }, {
      //     //自動編譯 sass 檔成 CSS (require 可載入 sass 了),可以傳入 sourceMap 參數以便 debug
      //     test: /\.scss$/,
      //     loader: 'style!css?sourceMap!sass?sourceMap'
      // }, {
      //     //自動編譯 less 檔成 CSS (require 可載入 less 了),可以傳入 sourceMap 參數以便 debug
      //     test: /\.less$/,
      //     loader: 'style!css?sourceMap!less?sourceMap'
      // }, {
      //     //自動將圖片轉成 Data URL
      //     test: /\.(jpe?g|JPE?G|png|PNG|gif|GIF|svg|SVG|woff|woff2|eot|ttf)(\?v=\d+\.\d+\.\d+)?$/,
      //     loader: 'url?limit=1024&name=[sha512:hash:base64:7].[ext]'
      // }
    ],
  },
  plugins: [
    //https://github.com/jantimon/html-webpack-plugin
    //This will generate a file dist/index.html and autp-import index_bundle.js
    new HtmlWebpackPlugin({
      filename: "index.html",
      template: "src/index.html",
    }),
  ],
};
  • .babelrc

根目录新增一个.babelrc文件,输入以下内容

{
    "presets": [
        "@babel/preset-env",
        "@babel/preset-react"
    ]
}
  • src目录

新增index.html文件

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>React App</title>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <p>welcome to react-world</p>
    <div id="root"></div>
  </body>
</html>

  • npm start出现报错Error: Cannot find module 'webpack-cli/bin/config-yargs'

百度了一些解决办法
* 解决方法一:
安装webpack-cli即可:
cnpm i webpack-cli -D
(测试无效)

* 解决方法二:
卸载当前版本的webpack和webpack-dev-server:

cnpm uninstall webpack -g
cnpm uninstall webpack-dev-server -g

指定老版本安装:

cnpm i webpack@3.8.0 -D
cnpm i webpack-dev-server@2.9.7 -D
  • 打包之后,用户看不到最新的,浏览器缓存

热爱前端的小君同学
关注 关注
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
webpack打包普通html项目,webpack打包处理
weixin_39693662的博客
06-18 2939
简介?webpack 是前端最流行的打包工具,能够做到以下:1) 将 sass/less 等预编译的CSS语言 转化为 浏览器能够识别的 css 文件2 )能够将多个文件(比如:多个sass文件)打包生成一个文件3 )能够打包 images/styles/assets/scripts 等前端常见的文件4 )搭建了开发环境(开启了服务器)5 )监视文件变化,文件改变后,能够自动刷新浏览器6 )对于V...
Node.js-利用webpack使传统html项目在node服务器运行打包的小玩意
08-09
利用webpack使传统html项目在node服务器运行打包的小玩意
webpack4-html-demo:一个普通html项目打包方案
05-02
webpack4-html-demo npm install 请先运行此命令加载依赖 npm run start 运行项目 npm run build 打包项目 ###一个普通 html 项目打包方案 适合普通 html 多页面打包 src为工作目录 assets放需编译资源 static放无需编译资源 commons放公共资源 views放页面,必须遵循name/name.js,name.css,name.html格式 main.js用来引入公共资源 此打包方案会自动读取src/views/下的目录,并将目录下的css,js打包进目录下的html,无需在html里link、srcipt显式引入! 注意main.js会被打包进所有页面,main.js引用的依赖自然也会打包进所有页面
webpack打包常用配置项
weixin_41166682的博客
09-05 1308
文件结构:最基础版 先安装 npm i webpack webpack-cli --dev。安装好后需要在webpack.config.js文件中配置它。sass和less预处理的loader也可以这样配置。运行命令:npx webpack 进行打包
在nuxt2如何将自己创建的文件夹里的.html文件打包dist里?
最新发布
weixin_54063136的博客
03-04 260
现在,当你运行npm run build命令时,privacy.html文件将会被打包dist/apps目录中。首先,在你的项目根目录下创建一个build文件夹(如果不存在的话)。
Webpack详细打包步骤
qq_39015698的博客
03-04 6143
----------------------简单打包流程----------------------- 1. 1.安装webpack cnpm install webpack webpack-cli -g; 新建一个src文件,在其目录下新建一个main.js入口文件(如果都已经生成存在则不用管) 2. 初始化项目包 npm init -y 生成package.json 3. 本地安装webpack依赖 cnpm install webpack webpack-cli --save-dev 4. web
webpack的使用
qq_58511059的博客
03-12 488
webpack的使用
Webpack打包-打包详细流程
weixin_40381947的博客
06-02 7951
Webpack是一个现代化的静态模块打包器,支持JavaScript、CSS、图片等资源的打包。它将所有模块及其依赖项视为静态资源,并创建一个依赖关系图,将这些资源转换为有效的输出文件。通过Webpack,可以将多个文件打包成一个或多个文件,并在网页中加载使用。 Webpack 支持各种开发场景和应用程序类型。在Webpack中,所有资源都被认为是模块,可通过引入其他模块而使用。Webpack提供了配置文件,允许开发人员自定义构建流程,以便灵活地满足各种场景的需求。Webpack 的功
webpack 从0开始
qq_39869526的博客
03-26 176
2020年了,再不会webpack敲得代码就不香了(近万字实战) 前言 2020年即将到来,在众多前端的招聘要求里,webpack、工程化这些字眼频率越来越高。日常开发者中,我们常常在用诸如vue-cli、create-react-app的脚手架来构建我们的项目。但是如果你想在团队脱颖而出(鹤立鸡群)、拿到更好的offer(还房贷),那么你必须去深刻的认识下我们经常打交道的webpack ...
webpack学习笔记(一)从零开始构建基础webpack项目
Yeluochen4869的博客
03-26 1411
由于webpack更新了4.0以上版本,这里描述的是v3版本 自己使用webpack有一段时间了,现在也在学习中,接触webpack之前所使用的工具只有grunt,之后遇到上了webpack,学习过程中也遇到了很多坑,网上也有不少教程,这里也就整理一下,当作学习笔记,不少地方借鉴了vue(特别是目录搭建+样式处理) 笔记目录 基础功能搭建 =&amp;gt; 能进行简单的打包+服务器构建+ba...
webpack 运行
jibuyueqian的博客
08-08 140
webpack 运行
webpack 从零开始配置教程
醉逍遥neo的博客
11-24 1529
由于webpack5刚刚发布,相关生态还不成熟,这里以webpack4的版本为例,为了避免插件版本的兼容问题,以下安装个别npm依赖时我会指定版本号。 本文仅作为webpack学习之用,实际项目中还是更推荐使用成熟的脚手架搭建,然后根据学习的成果再去定制改造。 一、基础 1、目录文件 新建一个文件夹作为示例项目项目根目录运行命令初始化package.json: npm init -y 然后按照以下目录先创建空文件: 2、入口和出口 安装webpack依赖 npm i -D webpack@4.44
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
12-12
亲测,webpack打包vue项目之后生成的dist文件可以部署到 express 服务器上运行。 我的vue项目结构如下: 1. 进入该vue项目目录,打开git bash,执行:npm run build(在package.json的scripts配置) 执行成功如下图所示: 然后此时你会发现项目下多了一个 dist 文件夹,dist下文件便是项目打包之后生成的文件。 此时我们直接在浏览器中打开index.html,是会报错的,什么都看不到。 2. 安装express-generator生成器 执行  $ npm install express-generator -g
react-webpack-HMR-middleware:通过webpack-dev-middleware和webpack-hot-middleware对热模块重新加载做出React
05-07
如果想要使用你自己的node脚本来运行webpack, 选择 webpack-dev-server API.已经使用express或别的框架了, 选择 webpack-hot-middleware.前两种方法的配置都较简单.第一种方法.第二种是webpack自带的热加载功能, ...
webpack-upload-plugin:Webpack插件
05-13
webpack-upload-plugin介绍这是的插件。 主要目的是提供一个工具,用于将html(或其他语言的模板)中使用的js / css / img / font上传到cdn,然后将引用替换为相应的cdn url。环境要求节点> = 10.5.0安装npm i -D ...
webpack-extension-reloader:从“ webpack-chrome-extension-reloader”的升级,现在在所有浏览器上
02-06
正在安装npm npm install webpack-extension-reloader --save-dev 纱yarn add webpack-extension-reloader --dev解决方案... 您是否曾经在开发浏览器扩展时感到恼火,并且因为它不是Web应用程序而是浏览器扩展而无法...
webpack-使用webpack-dev-server.rar
04-12
webpack-dev-server 为你提供了一个简单的 web 服务器,并且能够实时重新加载。这里用一个最简单的例子,让大家迅速的了解原理,避免被其他的附加技术干扰。
html-webpack-externals-plugin:与html-webpack-plugin一起使用以使用预先打包的供应商捆绑包的Webpack插件
02-06
html-webpack-externals-plugin :police_car_light: 已淘汰 :police_car_light: 抱歉,该模块已不再维护,其功能已由jharris4, 和。 您可能会遇到问题,并且最近的Webpack项目尚未使用它。 与一起使用以使用...
关于如何使用webpack打包dist文件
m0_56665734的博客
09-29 950
首先我使用的vue里自带build可以直接打包 创建一个webpack.config.js在这个文件夹里加入以下代码 然后直接npm run build就可以了 constpath=require("path");//nodejs内置模块 constHtmlWebpackPlugin=require("html-webpack-plugin");//引入插件 constVueLoaderPlugin=require("vue-loader/lib/plugin");/...
webpack创建项目打包
09-06
要使用webpack进行项目打包,首先需要安装webpack打包工具。为此,你可以按照以下步骤进行操作: 1. 在项目根目录中打开终端,并运行以下命令来初始化包资源管理器: ``` npm init -y ``` 这将在项目根目录中生成一个package.json文件,用来管理项目的依赖项和配置信息。 2. 接下来,安装webpackwebpack-cli编译器。在终端中运行以下命令: ``` npm install webpack webpack-cli --save-dev ``` 这将安装最新版本的webpackwebpack-cli,并将它们添加到项目的开发依赖项中。 3. 安装完成后,你可以开始配置webpack。在项目根目录中创建一个webpack.config.js文件,并根据你的需要进行相应的配置。例如,你可以指定入口文件、输出目录、使用的加载器和插件等等。 4. 配置完成后,你可以使用以下命令来打包你的项目: ``` npx webpack ``` 这将根据你在webpack.config.js中的配置,将项目打包到指定的输出目录中。 通过以上步骤,你就可以使用webpack创建项目并进行打包了。请记得根据你的项目需求进行相应的配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [使用webpack搭建项目](https://blog.csdn.net/m0_73334325/article/details/130420663)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 如何使用命令在navicat中创建数据库及表 31153
  • Metabase使用教程 25160
  • Swiper4.x的全部配置选项、方法、函数,具体使用 20250
  • 生活小妙方记录:治疗缠腰蛇 19602
  • three.js实现3D模型 18611

分类专栏

  • vue 13篇
  • css 5篇
  • 微信小程序 1篇
  • uni-app 6篇
  • uniapp 3篇
  • react 6篇
  • antd 4篇
  • electron 1篇
  • 跨域 1篇
  • MongoDB 1篇
  • mysql 6篇
  • 数据库 1篇
  • html 4篇
  • OA 2篇
  • win10系统 1篇
  • sublime text3 2篇
  • 前端 105篇
  • mac 1篇
  • tomcat 1篇
  • 生活 3篇
  • react-native 15篇
  • github 1篇
  • window系统 1篇
  • 禅道 1篇
  • 有道云 1篇
  • 优化 3篇
  • redux 1篇
  • metabase 1篇
  • Svg 1篇
  • tool 2篇

最新评论

  • webpack从0-1打包运行项目

    all-round: 感谢分享表情包

  • vuedraggable拖拽组件使用遇见的问题

    郑建洋: 什么问题

  • ReactNative手机端调用相册react-native-image-crop-picker

    ma3189524997: 重新运行一下就好了

  • css实现只有四个角才有边框

    西瓜不吃瓜: 为什么我的出不来效果呀

  • react移动端项目使用px2rem适配和antd-mobile按需加载的webpack

    崽崽的谷雨: postcss-preser-env 这个库我怎么在npm 查不到啊?

大家在看

  • 下载windows版的redis及redis客户端
  • RK3568平台(camera篇)V4L2查询获取设置设备 624
  • 蓝桥杯java递归类题 母牛的故事
  • 动手学深度学习4.7 前向传播、反向传播和计算图-笔记&练习(PyTorch) 1029
  • STM32单片机开发入门(一)STM32F103C8T6小系统板电路原理图分析

最新文章

  • 使用vue-codemirror做代码编辑器,并实现格式化代码
  • EXTJS实现自定义表格
  • echarts实际开发中遇到的问题
2024年2篇
2023年15篇
2022年17篇
2021年40篇
2020年35篇
2019年58篇
2018年80篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司延安网站设计模板报价襄樊网站优化软件推荐荆州网站建设设计推荐湘西网页制作报价木棉湾百度标王公司南昌外贸网站设计推荐黑河seo网站推广价格南昌seo价格沈阳网站优化按天扣费多少钱延安网站优化软件推荐铜陵百度关键词包年推广报价保定推广网站推荐安康营销型网站建设多少钱巢湖网站改版报价东营百搜标王价格长葛模板网站建设公司吕梁阿里店铺运营公司红河网站优化哪家好鸡西百度seo亳州百度标王信阳百度爱采购荆州关键词排名包年推广公司开封网站关键词优化推荐大鹏企业网站设计推荐龙岩如何制作网站多少钱济宁模板网站建设多少钱柳州网站优化按天计费公司中卫外贸网站建设多少钱吉安百度标王报价大丰外贸网站建设多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化