手记

WEBPACK基础入门 (三)

plugin , 中文翻译为 “插件” 。所谓插件 ,就是我们需要添加什么额外的功能 ,就可以插入一个相应功能的插件 ,十分便利 。插件是一个可选项 ,不像前面几个配置 entry 、output、loader那样是必须配置的。没有plugin ,我们的webpack也能将代码打包。
   但是,plugin可以让我们的操作更便捷,功能更强大。我个人认为plugin才是webpack的灵魂所在。

 其实虽然都是要引入的依赖。但plugin就是一个js对象,不能独立执行,而loader是一个文件夹,有cmd文件可以在命令行中执行。

  接下来简要介绍一下比较常用的几个插件

HTMLWebpackPlugin

我们使用webpack是将代码打包成目标文件 ,我们可以再把目标文件(js文件)引入到html文件中。但是我们觉得再创建html文件 ,然后手动引入目标文件(还要考虑到路径) 好麻烦 ,我们更希望在项目开发中就创建html文件 ,然后打包的过程中自动引入js文件,生成目标html文件 。这时就可以使用HTMLWebpackPlugin插件。

我们可以在项目中建立一个模板html文件 ,然后自动插入js脚本

//plugin使用时必须要引入
var HtmlWebpackPlugin = require('html-webpack-plugin');
var path = require('path');
module.exports = {
  entry:[ "index" : "./src/page/entry/index.js" ,
            "login" : "./src/page/entry/login.js" ,
             'result': "./src/page/entry/result.js" ]
  output: {
    path: path.resolve(__dirname, './dist'),
    filename: 'index_bundle.js'   
  },
  // plugins: [new HtmlWebpackPlugin()]   //这样可以生成一个空的html文件
   new HtmlWebpackPlugin({
             template : "./src/view/a.html",  //模板文件地址
             filename : "view/a.html",   //目标文件地址
             title    : title,
             chunks   :[name]  //引入哪些模块 ,对应entry里面的文件
                                         //比如["index","login"]引入index.js和login.js
          })
};

HotModuleReplacementPlugin

HotModuleReplacePlugin也是一个极为有效的插件,和devServer搭配使用最佳。在开发时一定有这样的经历,每次修改代码,页面都要刷新,然后你输入的数据全部都要重新输入:

(特别是这样的注册,一次次输入注册信息,简直要命)
使用HotModuleReplacementPlugin,修改后,会不刷新页面就更新。

//可以满足正常功能,也可以添加配置
new webpack.HotModuleReplacementPlugin()

(其他plugin,以后有机会再探讨,感觉这两个基本就够用了)

mode

mode比较简单,就是针对工作环境给webpack做一些默认优化,再编写调试阶段一般选择development ,上线时可以选择production,也可以任性地设为none.
eg:

module.exports = {
  mode: 'development'
}

webpack-dev-server

代码运行需要环境,在以往地开发中,只有等后端搭好服务器,前端才能把自己的代码挂载上去,然后测试代码是否正确,这样就十分麻烦,不高效。通过webpack-dev-server,我们可以搭建一个简易的本地服务器,让我们的代码跑起来,就可以针对性修改代码。如果你的功力高深,甚至可以写个复杂的服务器脚本(然鹅我比较菜)。
下载好webpack-dev-server,我们可以直接在命令行启动,webpack-dev-server或者node_modules/.bin/webpack-dev-server ,也可以配置快捷命令(前面讨论过)。
  我们也可以在指定服务器的一些信息,比如在计算机哪个端口打开等

 devServer: {
    contentBase: path.join(__dirname, 'dist'),  //目标文件目录
    compress: true,
    port: 9000
  }
1人推荐
随时随地看视频
慕课网APP