webpack 4.x 的使用

2019-07-22  本文已影响0人  给我把胡萝卜切成肉丁

webpack 4.x 使用入门

npm i webpack -D
npm i webpack-cli -D    // 注意:webpack 4.x 将 webpack-cli 分离出来了,要单独安装
module.exports = {
  mode: 'development',  //这里有两种模式供选择   development 和 production
  // 在 webpack 4.x 中,有一个很大的特性,就是约定大于配置, 约定 默认的打包入口路径是 src -> index.js, 默认输出文件为 dist -> main.js
}

webpack 4.x 使用升级版

webpack-dev-server

npm i webpack-dev-server -D
"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

npm i html-webpack-plugin -D 
npm i hpath -D 
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

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
{
  "presets": [
    "env",
    "stage-0",
    "react"
  ],
  "plugins": [
    "transform-runtime"
  ]
}

下面是打包一些其他类型文件要用到的第三方 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
    ]
  }
};
上一篇 下一篇

猜你喜欢

热点阅读