webpack入门配置(图文附源码)

源码:进阶版:https://gitee.com/Moruin/moruin-study

1.1、创建package.json文件

执行命令:

npm init

如下图:

执行完后在项目下会出现package.json文件

1.2、安装webpack

//全局安装

npm install -g webpack

//安装到你的项目目录

npm install --save-dev webpack

这里安装到项目目录,如下图:

执行完后,会在目录生成node_modules文件夹,package-lock.json文件

1.3、配置webpack.config.js文件

在项目根目录新建webpack.config.js文件,并输入以下代码配置:

const path = require('path');

module.exports = {

entry: './src/index.js',//需要解析的js文件名

output: { filename: 'index.js',//解析完的文件名

path: path.resolve(__dirname, 'dist') }

};

1.4、创建存放文件的文件夹

在项目目录下新建src文件夹,里面新建index.js文件,输入以下代码测试:

console.log("hello world!")

然后在cmd输入

node_modules\.bin\webpack

如下图就是打包成功了!

1.5、HtmlWebpackPlugin安装与配置

本插件是用于自动生成html文件

cmd输入下列代码安装:

npm install --save-dev html-webpack-plugin

如下图:

配置webpack.config.js文件:

var HtmlWebpackPlugin = require('html-webpack-plugin');//新增

var path = require('path'); module.exports = {

entry: './src/index.js',//需要解析的js文件名

output: { filename: 'index.js',//解析完的文件名

path: path.resolve(__dirname, 'dist')

},

plugins: [new HtmlWebpackPlugin()]//新增

};

配置好后,再运行node_modules\.bin\webpack打包一下,会发现dist文件夹里多了index.html文件,并且自动导入了index.js文件

1.6、babel-loader安装与配置

首先安装babel-loader:

npm install --save-dev babel-loader@7.1.2 babel-core@6.26.0 babel-preset-env@1.6.1

如下图:

然后修改配置文件webpack.config.js:

const path = require('path');

var HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {

entry: './src/index.js',

output: {

filename: 'index.js',

path: path.resolve(__dirname, 'dist')

},//新增

module: {

rules: [

{

test: /\.m?js$/,

exclude: /(node_modules)/,

use: {

loader: 'babel-loader',

options: {

presets: ['env']

}

}

}

]

},

plugins: [new HtmlWebpackPlugin()] };

配置好了之后,修改Index.js文件,使用ES6语法:

然后执行打包,查看是否成功:

1.7、react安装与配置

安装命令与babel类似:

npm install --save-dev babel-preset-react@6.24.1

npm install react@16.2.0 react-dom@16.2.0

如下图:

修改配置文件:

const path = require('path');

var HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {

entry: './src/index.js',

output: {

filename: 'index.js',

path: path.resolve(__dirname, 'dist') },

module: {

rules: [{

test: /\.m?js$/,

exclude: /(node_modules)/,

use: {

loader: 'babel-loader',

options: { presets: ['env', 'react'] }

}

}

] },

plugins: [

//处理html文件,使用模板

new HtmlWebpackPlugin({ template: './src/index.html' })

] };

这里template属性是使用src目录下的index.html文件当做模板来转换

配置好后,编写index.js,使用react:

import React from 'react';

import ReactDOM from 'react-dom';

ReactDOM.render(

<h1>Hello mybro!</h1>,

document.getElementById('app')

);

写好后打包,然后打开dist文件夹下的index.html文件查看效果:

1.8、加载css,css-loader安装与配置

命令安装:

npm install --save-dev style-loader@0.19.1 css-loader@0.28.8

如下图:

修改配置文件:

const path = require('path');

var HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {

entry: './src/index.js',

output: { filename: 'index.js', path: path.resolve(__dirname, 'dist') },

module: {

rules: [ //js文件 { test: /\.m?js$/, exclude: /(node_modules)/,

use: {

loader: 'babel-loader',

options: { presets: ['env', 'react'] }

}

},

//css文件

{ test: /\.css$/, use: ['style-loader', 'css-loader'] }

] },

plugins: [

//处理html文件,使用模板

new HtmlWebpackPlugin({ template: './src/index.html' })

] };

src目录下新建index.css,并编写样式:

index.js文件引入css文件:

import './index.js';

最后打包,刷新页面查看效果:

注意:这里的css文件编译可以在dist目录下的index.js文件里看到,是很长的一段,所以为了方便,我们需要把css文件独立出来,以便查看并减少渲染时间。

1.9、独立css文件,ExtractTextWebpackPlugin安装

安装命令:

npm install --save-dev extract-text-webpack-plugin@3.0.2

如下图:

修改配置文件:

const path = require('path'); var HtmlWebpackPlugin = require('html-webpack-plugin'); const ExtractTextPlugin = require("extract-text-webpack-plugin"); module.exports = { entry: './src/index.js', output: { filename: 'index.js', path: path.resolve(__dirname, 'dist') }, module: { rules: [ //引入js文件 { test: /\.m?js$/, exclude: /(node_modules)/, use: { loader: 'babel-loader', options: { presets: ['env', 'react'] } } }, //引入css文件 { test: /\.css$/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" }) } ] }, plugins: [ //处理html文件,使用模板 new HtmlWebpackPlugin({ template: './src/index.html' }), //处理css文件 new ExtractTextPlugin("index.css"), ] };

修改好后打包,可以看到dist目录下多出了index.css文件,并且页面效果依然。

1.10、图片文件处理

安装file-loader,url-loader:

npm install --save-dev file-loader@1.1.6 url-loader@0.6.2

如下图:

修改配置文件:

const path = require('path'); var HtmlWebpackPlugin = require('html-webpack-plugin'); const ExtractTextPlugin = require("extract-text-webpack-plugin"); module.exports = { entry: './src/index.js', output: { filename: 'index.js', path: path.resolve(__dirname, 'dist') }, module: { rules: [ //引入js文件 { test: /\.m?js$/, exclude: /(node_modules)/, use: { loader: 'babel-loader', options: { presets: ['env', 'react'] } } }, //引入css文件 { test: /\.css$/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" }) }, //图片处理 { test: /\.(png|jpg|gif)$/i, use: [{ loader: 'url-loader', options: { limit: 8192 } }] } ] }, plugins: [ //处理html文件,使用模板 new HtmlWebpackPlugin({ template: './src/index.html' }), //处理css文件 new ExtractTextPlugin("index.css"), ] };

然后引入图片:

ok,打包,刷新页面:

1.11、独立公共文件

不需要安装,直接修改配置文件:

const path = require('path'); const webpack = require('webpack'); var HtmlWebpackPlugin = require('html-webpack-plugin'); const ExtractTextPlugin = require("extract-text-webpack-plugin"); module.exports = { entry: './src/index.js', output: { filename: 'js/index.js', path: path.resolve(__dirname, 'dist') }, module: { rules: [ //引入js文件 { test: /\.m?js$/, exclude: /(node_modules)/, use: { loader: 'babel-loader', options: { presets: ['env', 'react'] } } }, //引入css文件 { test: /\.css$/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" }) }, //图片处理 { test: /\.(png|jpg|gif)$/i, use: [{ loader: 'url-loader', options: { limit: 8192, name: 'resource/[name].[ext]' } }] } ] }, plugins: [ //处理html文件,使用模板 new HtmlWebpackPlugin({ template: './src/index.html' }), //处理css文件 new ExtractTextPlugin("css/[name].css"), //独立公共组件 new webpack.optimize.CommonsChunkPlugin({ name: 'common', filename: 'js/base.js' }) ] };

修改好了之后,删掉dist文件夹,重新打包后,dist目录结构就比较清晰:

1.12、webpack-dev-server自动刷新配置

安装命令:

npm install --save-dev webpack-dev-server@2.9.7

如下图:

修改配置文件:

const path = require('path'); const webpack = require('webpack'); var HtmlWebpackPlugin = require('html-webpack-plugin'); const ExtractTextPlugin = require("extract-text-webpack-plugin"); module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), publicPath: '/dist/', filename: 'js/index.js' }, module: { rules: [ //引入js文件 { test: /\.m?js$/, exclude: /(node_modules)/, use: { loader: 'babel-loader', options: { presets: ['env', 'react'] } } }, //引入css文件 { test: /\.css$/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" }) }, //图片处理 { test: /\.(png|jpg|gif)$/i, use: [{ loader: 'url-loader', options: { limit: 8192, name: 'resource/[name].[ext]' } }] } ] }, plugins: [ //处理html文件,使用模板 new HtmlWebpackPlugin({ template: './src/index.html' }), //处理css文件 new ExtractTextPlugin("css/[name].css"), //独立公共组件 new webpack.optimize.CommonsChunkPlugin({ name: 'common', filename: 'js/base.js' }) ], devServer: { //默认是8080端口,为了避免冲突修改一下 port: 8095 } };

然后不需要执行打包,执行新的命令:

node_modules\.bin\webpack-dev-server

如下图:

到此自动刷新就完成了,修改js文件查看实时修改效果。

最后修改package.json文件:

这样修改之后,我们可以直接执行一条短的命令就可以自动打包了:

npm run dev

如图:

打包就变成了:

npm run dev

如图:

 

 

好人一生平安!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值