webpack学习笔记

Webpack学习笔记

https://doc.webpack-china.org/concepts/   webpack的官方文档

第一节:安装 webpack

1、打开命令行,cd F 盘,

输入命令: mkdir webpack-demo (mkdir:创建新文件夹)  然后 cd webpack-demo

输入命令:npm install -g webpack (-g:全局安装)  在全局安装 webpack

2webpack 官方不建议全局安装,而是在项目本地安装。

项目本地安装需要先初始化 npm:  

2.1、命令行输入 npm init 先初始化本地 package.json 文件

package name(文件名称,必须填写):

version(版本,可填,默认为1.0.0):

description(描述):

entry point(入口文件):

test command():

git repository:

keywords:

author(作者):

license:

2.2、完成后继续输入命令 npm install --save-dev webpack 安装默认版本

2.3、也可以【npm install --save-dev webpack@3.6.0】 指定安装 webpack3.6.0版本  

备注: --save 安装到生产环境中  -dev 安装到开发环境中;局部安装打包需要在pack.json中配置

"scripts": {"build": "webpack"},

第二节:快速上手一个demo

1、webpack 旧版本升级新版本的方法:

先删除 node_modules 文件夹,再将package.json 文件中 devDependencies 里面的 webpack 参数改为需要更新的版本号,然后在当前目录下执行 npm install 就会更新到指定的 webpack 版本

2、建立基本的项目结构

2.1、建立 src 文件夹(源代码文件夹)

2.2、建立dist 文件夹(生产环境的文件夹)

2.3、在dist 目录下建立index.html 文件

<body>
  <div id="title"></div>
  <script src="./bundle.js"></script>
</body>

2.4、在src目录下建立entery.js(入口文件)

document.getElementById('title').innerHTML='Hello World';

2.5、命令行运行 webpack src/entery.js dist/bundle.js

3、安装 live-server 服务器,为以后的学习做准备,命令行运行

npm install -g live-server

4、命令行输入 live-server 启动服务器

第三节:配置入口和出口

1、配置文件webpack.config.js的基本结构

1.1、src目录下建立 entery.js entery2.js,index.html中引入这两个js文件

1.2、package.json的同级目录下新建 webpack.config.js 文件

const path = require('path');
module.exports = {
  entry: {
    entery: './src/entery.js',
    entery2: './src/entery2.js'
  },
  output: {
    path: path.resolve(__dirname,'dist'),
    filename: '[name].js'
  },
  module: {},
  plugins: [],
  devServer: {}
}

1.3、命令行运行 webpack 再启动 live-server

 

第四节:配置服务器热更新

1.1、 webpack.config.js中配置 devServer

devServer: {
  contentBase: path.resolve(__dirname,'dist'),
  host: '192.168.6.13',
  compress: true,
  port: 8087
}

contentBase:配置需要运行目录的路径,一般为绝对路径

host: 配置服务器地址

compress: 压缩参数

port: 配置端口号

1.2、安装 webpack-dev-server 插件,命令行运行

npm install webpack-dev-server --save-dev

1.3、package.json 文件中配置

"scripts": {
  "server": "webpack-dev-server"
}

1.4、命令行运行 npm run server ,再将运行成功的服务器地址输入到浏览器地址栏中就能实现热更新了(注意,配置热更新 webpack 版本必须是3.6以上才行,否则会失败)

1.5.如果热更新配置好之后还是无法实现热更新,再在plugins中配置

new webpack.HotModuleReplacementPlugin(), //用于热更新不能正常使用时的配置

第五节:打包 css 代码

1、首先要安装style-loader,用于处理css中的url,命令行运行

npm install style-loader --save-dev

2、还要安装css-loader,用于样式的处理,比如 idclass,命令行运行

npm install css-loader --save-der

3、在js文件中引入css 文件,:import css from  ’./css/index.css’

4、在webpack.config.js文件中配置 module 参数

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

5、命令行运行 npm run server 启动服务器

 

第六节: 打包 js 代码

1、webpack.config.js配置文件中引入插件 uglify

const ugligy = require('uglifyjs-webpack-plugin');

2、plugins中配置

plugins: [
  new ugligy()
],

3、命令行运行 webpack ,不能直接运行  npm run server,会报错

第七节: 打包 html 代码

1、src目录下建立index.html文件,dist目录下的index.html文件删除

2、安装 html-webpack-plugin 插件,命令行运行

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

3、webpack.config.js文件中引入

const htmlPlugin = require('html-webpack-plugin');

4、webpack.config.js文件中配置 plugins 参数

plugins: [
 // new ugligy()
  new htmlPlugin({
    minify: {
      removeAttributeQuotes: true //去掉html代码中一些属性的 ""
    },
    hash: true, //每次压缩都生产不同的js名称,不会出现浏览器缓存
    template: './src/index.html' //需要打包的模板文件路径
  })
],

5、删除 dist 目录,命令行运行 webpack,会自动打包生产新的dist目录及所有文件

6、命令行运行 npm run server, 在浏览器中输入相应的地址和端口号,可以热更新

 

第八节: css中引用图片的处理

1、安装 file-loader url-loader 插件,命令行运行

npm install --save-dev file-loader url-loader

2、webpack.config.js文件中配置 module 参数

module: {
  rules: [
    {
      test: /\.css$/,
      use: [
        {loader: 'style-loader'},{loader: 'css-loader'},
      ]
    },
    {
      test:/\.(png|jpg|gif)/,
      use: [

{loader: 'url-loader',options: {limit: 5000}}

]
    }
  ]
},

optionslimit:5000 ,当图片大小小于这个值时,就打包成代码的形式

第九节: css分离和分离之后图片路径的基本处理

1、先安装extract-text-webpack-plugin 插件,命令行运行

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

2、webpack.config.js文件中引入

const extractTextPlugin = require('extract-text-webpack-plugin');

3、plugins中配置

new extractTextPlugin('/css/index.css')

4、module中配置

module: {
  rules: [
    {
      test: /\.css$/,
     // use: [{loader: 'style-loader'},{loader: 'css-loader'},]
      use: extractTextPlugin.extract({
        fallback: 'style-loader',
        use: 'css-loader'
      })
    },
    {
      test:/\.(png|jpg|gif)/,
      use: [{loader: 'url-loader',options: {limit: 5000}}]
    }
  ]
},

5、配置output出口文件参数

output: {
  path: path.resolve(__dirname,'dist'),
  filename: '[name].js',
  publicPath: 'http://192.168.6.13:8087/'
},

publicPath:配置url为服务器的绝对路径,避免打包之后找不到图片的问题

第十节: html中的图片打包

1、先安装 html-withimg-loader插件,命令行运行

npm install --save-der html-withimg-loader

2、module中配置 loader参数

{
  test: /\.(html|htm)$/i,
  use: ['html-withimg-loader']
}

 

第十一节: 打包和分离LESS

1、安装 Less 的服务,命令行运行

npm install --save-dev less

2、安装 Less-loader 用于打包,命令行运行

npm install --save-dev less-loader

3、webpack.config.js中配置loader

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

4、编写一个less文件

@base :#000;
#gogo{
  width:300px;
  height:300px;
  background-color:@base;
}

5、引入到entery.js文件中

import less from './css/black.less';

6、命令行运行 webpack 打包

7、less文件分离,webpack.config.js中配置extractTextPlugin

{
  test: /\.less$/,
 // use: [{loader: 'style-loader'},{loader: 'css-loader'},]
  use: extractTextPlugin.extract({
    fallback: 'style-loader',
    use: [
      {loader: 'css-loader'},
      {loader: 'less-loader'}, //用于less文件分离
    ]
  })
},

8、命令行运行 webpack 打包


第十二节: 打包和分离SASS

1、安装Sass 打包用的 loader,这里需要安装两个包.node-sass sass-loader

node-sass:因为sass-loader依赖于node-sass,所以需要先安装node-sass,命令行运行

npm install --save-dev node-sass

npm install --save-dev sass-loader

注意:npm安装时,这个loader很容易安装失败,最少使用cnpm来安装,如果一直安装报错,最好是把node-modules文件夹删除后,再重新安装。

2、webpack.config.js中配置loader

{
  test: /\.scss$/,
  use: [
    { loader: "style-loader" }, // creates style nodes from JS strings  
    { loader: "css-loader"   }, // translates CSS into CommonJS
    { loader: "sass-loader"  }// compiles Sass to CSS
  ]
}

注意:这里需要注意loader的加载要有先后顺序。

3、编写一个less文件

$nav-color: #FFF;
#nav {
  $width: 100%;
  width: $width;
  height:30px;
  background-color: $nav-color;
}

npm run server 来看看结果

4、less文件分离,webpack.config.js中配置extractTextPlugin

{
  test: /\.scss$/,
 // use: [{loader: 'style-loader'},{loader: 'css-loader'},]
  use: extractTextPlugin.extract({
    fallback: 'style-loader',
    use: [
      {loader: 'css-loader'},
      {loader: 'sass-loader'}, //用于sass文件分离
    ]
  })
},

5、命令行运行 webpack 打包


第十三节: postcss自动添加css属性前缀

1、安装postcss-loader autoprefixer

npm install --save-der postcss-loader autoprefixer

2、package.json同级目录新建postcss.config.js文件,并配置参数

module.exports = {
  plugins: [
    require('autoprefixer')
  ]
}

3、webpack.config.js中配置css-loader

{
  test: /\.css$/,
 // use: [{loader: 'style-loader'},{loader: 'css-loader'},]
  use: extractTextPlugin.extract({
    fallback: 'style-loader',
    use: [
      {loader: 'css-loader',options:{importLoaders:1}},
      {loader: 'postcss-loader'}
    ]
  })
},

4、命令行运行 webpack 代码打包

第十四节:消除无用的css

1、安装purifycss插件

npm install --save-dev purifycss-webpack purify-css

2、webpack.config.js中引入 glob 插件

const glob = require('glob');

const PurifyCSSPlugin = require('purifycss-webpack');

3、配置 plugins 参数

new PurifyCSSPlugin({
  paths:glob.sync(path.join(__dirname,'src/*.html'))
}),


第十五节:Babel转换ES6

1、安装babel-core babel-loader babel-preset-es2015 三个插件包

npm install --save-dev babel-core babel-loader babel-preset-es2015

2、webpack.config.js中配置

{
  test: /\.js$/,
  use: [
    {loader: 'babel-loader'},
  ],
  exclude: /node_modules/, //转换前先剔除掉 node_modules 文件夹
}

3、package.json文件的同级目录新建 .babelrc 文件,这是babel的配置文件,然后配置参数

{
  "presets": ["es2015"]
}

4、命令行运行 webpack 打包

5、安装babel-preset-env插件包,用于es6es7es8的转换

npm install --save-dev babel-preset-env

6、.babelrc文件中配置

{
  "presets": ["env"]
}

7、命令行运行 webpack 打包

 

第十六节:打包后的代码调试

1、配置调试环境,webpack.config.js中配置

module.exports = {
  devtool: 'eval-source-map', //用于开发环境下的打包调试
}

开发阶段用于打包调试的配置大致可分为以下四种

source-map 独立的 map 文件,有行和列的提示

cheap-moudle-source-map 独立的 map 文件,只有行的提示,没有列

eval-source-map 适用于开发阶段,有行和列的提示

cheap-moudle-eval-source-map 有列的提示

第十七节:开发和生产环境并行

1、开发环境依赖包和生产环境依赖包的配置区分

"devDependencies": {} //开发环境依赖包的配置

"dependencies": {}//生产环境依赖包的配置

2、如果是老项目安装,只安装生产环境依赖包的话

npm install --production

3、如何配置开发环境和生产环境的打包命令

3.1、在package.json中配置

"scripts": {
  "server": "webpack-dev-server --open",
  "build": "set type=build&webpack",
  "dev": "set type=dev&webpack"
},

3.2、在webpack.config.js中配置

if (process.env.type=="build") {
  var website = {publicPath:'http://192.168.6.13:8087/'}
}else {
  var website = {publicPath:'http://192.168.6.13:8088/'}
}

4、命令行运行

npm run dev ; 打包到开发环境

npm run build;打包到生产环境

 

第十八节:模块化配置

1、package.json文件的同级目录新建文件夹 config,用于模块化配置,然后建立一个模块entry.js,入口文件配置

const entry = {};
entry.path = {
  entry: './src/entery.js',
};
module.exports = entry;

2、webapck.config.js中引入entry模块

const entry = require('./config/entry');

3、然后将入口文件的配置改为

entry: entry.path,

4、打包运行,模块化配置成功

 

第十九节:打包第三方类库--以引入jquery为例

1、安装jquery

npm install --save jquery

2、如果只是局部使用,比如在entery.js中使用的话,先引入

import $ from 'jquery';

3、如果需要在整个项目中使用的话,需要在webpack.config.js中配置plugin参数

new webpack.ProvidePlugin({ $: 'jquery' }),

4、entery.js中使用 jquery

$('#haha').html('看到老子你就成功');

5、npm run build 打包


第二十节:watch的正确使用方法,配置热打包参数

1、webpack.config.js中和plugins平级添加配置项 watchOptions

watchOptions: {
  poll: 1000, //监测时间1000毫秒
  aggregateTimeout: 500, //防止重复按保存键时重复打包出错
  ignored: /node_modules/, //打包时不监测的文件夹
}

2、 命令行运行 webpack -watch

3、package.json 中配置 dev 参数

"dev": "set type=dev&webpack --watch"

4、命令行运行 npm run dev 也可以实现热打包

扩展小技巧: 如果是多人共同开发一个项目,需要在各自的打包文件前面加上版权配置项,来区分打包后的代码是谁写的,可以在plugins中配置参数

new webpack.BannerPlugin('版权配置项'),


第二十一节:webpack 优化黑技能,平常开发时常用的小技巧

1、优化打包第三方类库,打包时将没有用到的第三方插件不进行打包,配置方法:

1.1、尽量不使用 import 的方法来引入第三方类库

1.2、webpack.config.js中配置 webpack.ProvidePlugin 参数

new webpack.ProvidePlugin({ $: 'jquery' }),

这样配置的话,如果项目中没有使用的第三方类库,就不会被打包进去

第二十二节:webpack 集中打包静态资源

1、安装copy-webpack-plugin插件

npm install --save-dev copy-webpack-plugin

2、webpack.config.js中引入

const copyWebpackPlugin = require('copy-webpack-plugin');

3、配置plugins参数

new copyWebpackPlugin([{
  from: __dirname+'src/public',
  to: './public'
}]),

第二十三节:Json配置文件使用

1、package.json文件的同级目录新建config.json文件,配置参数

{
  "name": "湖南交通计划",
  "webSite": "https://www.hnjtjh.com:6661/traffic_index/Dynamic_work.php"
}

2、index.html中写入代码

<div id="json"></div>

3、在入口文件entery.js中配置

let json = require('../config.json');
document.getElementById('json').innerHTML = json.name+':webSite='+json.webSite;

 

第二十四节: webpack实战,构建 react开发环境

1、新建项目目录 webpack-react

2、npm init 项目初始化,生成package.json文件

3、npm install --save-dev webpack

4、新建 webpack.config.js 文件用于webpack的配置

5、新建app文件夹,在文件夹中建立index.js

6、配置webpack.config.js参数,把入口和出口先配置出来

const webpack = require('webpack');
const path = require('path');

module.exports = {
  entry: './app/index.js',
  output: {
    filename: 'index.js',
    path: path.resolve(__dirname,'dist')
  }
}

7、package.json同级目录建立index.html文件

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <title>webpack配置开发环境实战</title>
</head>
<body>

</body>
<script src="./dist/index.js"></script>
</html>

8、index.js中写入测试代码

function component() {
  var element = document.createElement('h1');
  element.innerHTML = '老子是来打酱油的'
  return element;
}
document.body.appendChild(component());

9、package.json中配置打包命令

"scripts": {
  "build": "webpack"
},

10、安装webpack服务器

npm install --save-dev webpack-dev-server

11、webpack.config.js中配置服务器地址和端口号

devServer: {
  contentBase: './',
  host: '192.168.6.13',//本机地址
  compress: true,
  port: 8787
}

12、package.json中配置打包命令

"scripts": {
  "build": "webpack",
  "server": "webpack-dev-server --open"
},

13、命令行打包 npm run build

14、webpack.config.js中配置output参数

publicPath: 'temp/' //缓存文件夹,用于随时更新

15、index.html中修改引入jssrc

<script src="./temp/index.js"></script>

16、命令行打包 npm run build , 实现代码修改热更新

17、安装babelreact所需要的依赖包

npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react

18、webpack.config.js中配置loaders参数

module: {
  loaders: [
    {
      test: /\.js$/,
      exclude: /node_modules/,
      loaders: "babel-loader",
      query: {
        presets: ['es2015','react']
      }
    }
  ]
}

19、安装react生产环境依赖包

npm install --save react react-dom

20、index.js中重新写入代码

import React from 'react'
import ReactDom from 'react-dom'
ReactDom.render( <h1>我是酱油弟,老子是来打酱油的</h1>,

document.getElementById('app') );

21、npm run server 命令行打包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值