美文网首页
webpack 4.x 的使用

webpack 4.x 的使用

作者: 给我把胡萝卜切成肉丁 | 来源:发表于2019-07-22 21:46 被阅读0次

webpack 4.x 使用入门

  • 运行 npm init -y 快速初始化项目
  • 在项目根目录创建 src 源代码目录和 dist 产品目录
  • 在 src 目录下创建 index.htmlindex.js
  • 安装 webpack
npm i webpack -D
npm i webpack-cli -D    // 注意:webpack 4.x 将 webpack-cli 分离出来了,要单独安装
  • 配置 webpack
    • 创建一个 webpack.config.js 的文件,配置如下
      • development 模式下输出的文件没压缩
      • production 模式下输出的文件进行了压缩
module.exports = {
  mode: 'development',  //这里有两种模式供选择   development 和 production
  // 在 webpack 4.x 中,有一个很大的特性,就是约定大于配置, 约定 默认的打包入口路径是 src -> index.js, 默认输出文件为 dist -> main.js
}
  • 运行 webpack ,你会发现 dist 文件夹 多了个 main.js
  • 然后 将 main.js 导入 index.html, 就能实现 js 文件的调用了

webpack 4.x 使用升级版

webpack-dev-server

  • 用于实时打包文件并更新,但是,webpack-dev-server 打包好的 main.js 是托管到了内存中,所以在项目根目录中看不到
  • 后面要想把文件打包到 dist 文件夹,还是要执行 webpack 命令
  • 安装 webpack-dev-server
npm i webpack-dev-server -D
  • package.json 添加下面的 dev,对 webpack-dev-server 进行配置
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --open --port 5000 --hot --host 192.168.1.102"
  },

--open 执行 npm run dev后自动打开默认浏览器
--port 3000 指定端口号,默认是8080
--hot 完成自动刷新
--host 192.168.1.102

html-webpack-plugin

  • 用于把 index.html 生成到内存中去
  • 安装 html-webpack-plugin
npm i html-webpack-plugin -D 
  • 由于会用到 path 模块,所以,先安装一下 path
npm i hpath -D 
  • webpack.config.js 里面配置 html-webpack-plugin
const path = require("path");
 // 导入在内存中自动生成 index.html 页面的插件
const htmlWebpackPlugin = require('html-webpack-plugin'); 

module.exports = {
  ... , // 这里是其他属性,先省略
  plugins: [ // 所有 webpack 插件的配置节点
    new htmlWebpackPlugin({
      template: path.join(__dirname, './src/index.html'), // 指定模板文件路径
      filename: 'index.html'  // 设置生成的内存页面的名称
      });
  ]
}

现在不用再 index.html 文件手动导入 index.js 文件,直接 运行 npm run dev 网页打开后查看源码,会发现在最后面自动导入了 js 文件

babel

  • 它的作用是对js代码进行转译,将一些 ES6 和 其他一些 js 文件中浏览器不识别的代码转换成浏览器识别的代码
  • 需要安装的一些模块如下(这里的 react 是使用 react 要用到的包)
  • 注意:这里是的 babel-loader 7.x 的用法,8.x 请参考官网https://www.npmjs.com/package/babel-loader
npm i babel-core babel-loader@7 babel-plugin-transform-runtime -D
npm i babel-preset-env babel-preset-stage-0 babel-preset-react -D
  • 还需单独创建一个 .babelrc 文件进行 babel 配置
{
  "presets": [
    "env",
    "stage-0",
    "react"
  ],
  "plugins": [
    "transform-runtime"
  ]
}

下面是打包一些其他类型文件要用到的第三方 loader

  • 配置前要先安装需要使用到的相关 loader
  • 配置如下
// 由于 webpack 是基于 Node 进行构建的,所以,webpack 的配置文件中,任何合法的 Node 代码都是支持的
const path = require('path');
// 在内存中,根据指定的模板页面,生成一份内存中的首页,同时自动把打包好的 bundle 注入到页面底部
// 如果要配置插件,需要在导出的对象中,挂载一个 plugins 节点
const htmlWebpackPlugin = require('html-webpack-plugin');

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

// 当以命令行形式运行 webpack 或 webpack-dev-server 的时候,工具会发现,我们并没有提供要打包的文件的入口和出口文件,此时,它会检查项目根目录中的配置文件,并读取这个文件,就拿到了导出的这个 配置对象,然后根据这个对象进行打包构建
module.exports = {
  mode: 'development',  //这里有两种模式供选择   development 和 production
  // 在 webpack 4.x 中,有一个很大的特性,就是约定大于配置, 约定 默认的打包入口路径是 src -> index.js, 默认输出文件为 dist -> main.js
  entry: path.join(__dirname, './src/main.js'), // 入口文件
  output: { // 指定输出选项
    path: path.join(__dirname, './dist'),  // 输出路径
    filename: 'bundle.js' // 指定输出文件的名称
  },
  plugins: [ // 所有 webpack 插件的配置节点
    new htmlWebpackPlugin({
      template: path.join(__dirname, './src/index.html'), // 指定模板文件路径
      filename: 'index.html'  // 设置生成的内存页面的名称
    }),
    new vueLoaderPlugin()  // 此实例是配置 vue-loader 所需
  ],
  module: { // 配置所有第三方 loader 模块的
    rules: [ // 第三方模块的匹配规则
      { test: /\.css$/, use: ['style-loader', 'css-loader'] },
      { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },
      { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }, // 处理scss 的配置
      { test: /\.(jpg|png|gif|bmp|jpeg)$/, use: 'url-loader?limit=34270&name=[hash:8]-[name].[ext]' }, // 处理图片 url 的配置
      // limit 给定的值是图片的大小,单位是 byte,如果我们引用的图片 大于 给定的 limit 值,则不会被转为 base64 格式的字符串,如果图片 小于或等于 给定的 limit 的值,则会被转为 base64 的字符串
      { test: /\.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' }, // 处理字体文件的 loader
      { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ },  // 配置 babel 来转换高级的 ES 语法
      { test: /\.vue$/, use: 'vue-loader' }  // 处理 .vue 文件的第三方 loader
    ]
  }
};

相关文章

网友评论

      本文标题:webpack 4.x 的使用

      本文链接:https://www.haomeiwen.com/subject/mkmglctx.html