WEBPACK 安装与使用

WEBPACK-4 安装与使用


安装:

webpack

webpack-cli 命令工具 

npm install webpack webpack-cli --save-dev

执行: 以下命令查看是否安装成功

./node_modules/.bin/webpack -v

./node_modules/.bin/webpack-cli -v

简单的案例开始


目录结构 

webpack 构建

默认读取 webpack.config.js 的配置文件

const path = require('path');

module.exports = {
  entry: './src/index.js',//入口文件
  output: {
    filename: 'main.js',//编译出来的文件名
    path: path.resolve(__dirname, 'dist')//编译到的目标路径
  }
};

WEBPACK 命令介绍 


webpack --watch //命令当文件发生变化时自动监听编译
//开启生成环境shortcut for --optimize-minimize --define
//process.env.NODE_ENV="production" 

webpack -p 

webpack --congif //指定文件配置

webpack --progress //输出构建过程

 

WEBPACK 插件介绍


//清除文件夹插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
//模板插件
const CleanWebpackPlugin = require('clean-webpack-plugin');
//js压缩插件
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

webpack.config.js 基本配置

const path = require('path');
//处理模板html自动引入JS
const HtmlWebpackPlugin = require('html-webpack-plugin');
//清除文件夹
const CleanWebpackPlugin = require('clean-webpack-plugin');
//js压缩插件
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const webpack = require('webpack');
module.exports = {
  mode:"production",
  entry: {
    app:'./src/index.js'
  },
  output: {
    filename: '[name].bundle.js',//名字已入口entry 名字命名
    path: path.resolve(__dirname, 'dist')//输出文件的路径
  },
  //输出源码
  devtool: 'inline-source-map',

  /**
   * 一些优化配置
   */
  optimization:{
    //压缩js
    minimizer: [
      new UglifyJsPlugin()
    ],
    //抽离公用的js部分
    splitChunks:{
      chunks:'all'
    }
  },
  plugins:[
    //清除文件
    new CleanWebpackPlugin(['dist']),
    //设置默认环境变量
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': '"production"',
      LOCAL_ROOT: JSON.stringify("http://ziksang.com")
  }),
    //模板插件
    new HtmlWebpackPlugin({
      title: 'Output Management'
    }),
    //配合devServer 实现热更新
    new webpack.HotModuleReplacementPlugin()
  ]
};

webpack-dev-server 配置webpack 服务配置

const webpackDevServer = require('webpack-dev-server');
const webpack = require('webpack');

const config = require('./webpack.config.js');
const options = {
  contentBase: './dist',//配置根路径
  hot: true,//是否开启热更新
  host: 'localhost'
};

webpackDevServer.addDevServerEntrypoints(config, options);
const compiler = webpack(config);
const server = new webpackDevServer(compiler, options);
//启动端口
server.listen(5000, 'localhost', () => {
  console.log('dev server listening on port 5000');
});

package.json

{
  "name": "webpack-skeleton",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack -p --progress",
    "watch": "webpack --watch --mode=production",
    "start": "webpack-dev-server --open --mode=production",
    "devserver": "node dev-server.js"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "clean-webpack-plugin": "^0.1.19",
    "html-webpack-plugin": "^3.2.0",
    "uglifyjs-webpack-plugin": "^2.0.1",
    "webpack": "^4.21.0",
    "webpack-cli": "^3.1.2",
    "webpack-dev-server": "^3.1.9"
  }
}

WEBPACK 4.X 多入口、多页面配置


const path = require('path');
//处理模板html自动引入JS
const HtmlWebpackPlugin = require('html-webpack-plugin');
//清除文件夹
const CleanWebpackPlugin = require('clean-webpack-plugin');
//js压缩插件
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const webpack = require('webpack');
module.exports = {
  mode: "development",
  entry: {
    entryA: path.resolve(__dirname, "src/a/a.js"),
    entryB: path.resolve(__dirname, "src/b/b.js")
  },
  output: {
    filename: './js/[name].[hash:8].bundle.js',//名字已入口entry 名字命名
    path: path.resolve(__dirname, 'dist')//输出文件的路径
  },
  module: {
    rules: [
      { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" }
    ]
  },
  //输出源码
  devtool: 'source-map',

  /**
   * 一些优化配置
   */
  optimization: {
    //压缩js
    // minimizer: [
    //   new UglifyJsPlugin()
    // ],
    //抽离公用的js部分 , 配置自动提取node_modules里用到的模块如jquery
    splitChunks: {
      cacheGroups: {
        vendor: {
          // test: /\.js$/,
          test: /[\\/]node_modules[\\/]/,
          chunks: "initial", //表示显示块的范围,有三个可选值:initial(初始块)、async(按需加载块)、all(全部块),默认为all;
          name: "vendor", //拆分出来块的名字(Chunk Names),默认由块名和hash值自动生成;
          enforce: true,
        }
      }
    }
  },
  plugins: [
    //清除文件
    new CleanWebpackPlugin(['dist']),
    //设置默认环境变量
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': '"production"',
      LOCAL_ROOT: JSON.stringify("http://ziksang.com")
    }),
    /**
     * chunks 代码块,vendor 为固定静态资源splitChunks配置,各个模板的入口 对应entry入口模块
     */
    new HtmlWebpackPlugin({
      filename: 'entryA.html',
      template: 'src/a/a.ejs',
      chunks: ['vendor','entryA'],
      inject: true
    }),
    new HtmlWebpackPlugin({
      filename: 'entryB.html',
      template: 'src/b/b.ejs',
      chunks: ['vendor','entryB'],
      inject: true
    }),
    //配合devServer 实现热更新
    new webpack.HotModuleReplacementPlugin()
  ]
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值