IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 前端项目工程化和webpack 4.0总结 (一) -> 正文阅读

[JavaScript知识库]前端项目工程化和webpack 4.0总结 (一)

前端项目工程化和webpack 4.0总结 (一)

webpack 4.0总结

前言:项目工程化就是项目自动化,能用几行命令行来给我们执行压缩、转换、分类等繁琐的纯体力劳动,之前有gulp,grunt等工具执行压缩等操作,但是不够全面,直到神器webpack的诞生, 使用webpack就解决前端一大半工程化的问题

webpack 前端工程化配置

webpack 四大能力

  • 打包 把所有文件打包到相对集中的一个目录,利于访问加载,对模块化特别友好
  • 运行 启用一个本地服务
  • 转换 转化less => css es6 => ex5 代码
  • 自动化 也是其一个特点

webpack配置项

  • entry 打包入口(输入我们辛辛苦苦写的代码)
  • output 打包出口(输出webpack给我们包装后的代码)
    • library 库名(发布npm包的时候配置)
    • libraryTarget 导出库的类型, umd, commonjs等
    • libraryExport
  • module 模块
    • rules 配置loader (想要webpack干什么活,在这边配置)
  • plugins 配置插件,webpack 主要能力之外的扩展
  • resolve 解析文件引用的模块的配置
    • modules 模块的根目录
    • extensions 自动补充的后缀,引入模块时候可以不写
    • alias 模块解析时候的别名
  • devServer 本地开发服务相关配置
    • proxy 代理服务配置
    • contentBase 运行服务虚拟文件地址
    • compress 是否开启gzip压缩
    • https 是否开启https
  • optimization 优化项
    • minimize 是否开启
    • minimizer 执行插件

配置样例:有些简单的就没写

const HtmlWebpackPlugin = require('html-webpack-plugin')
const path = require('path')
const VueLoadPlugin = require('vue-loader/lib/plugin')

module.exports = {
  mode: 'development',
  entry: {
    app: './view/index.js'
  },
  output: {
    path: path.resolve(__dirname, '../lib'),
    filename: '[name].js',
    library: 'cloudWords',
    libraryTarget: 'umd',
    libraryExport: 'default'
  },
  devServer: {
    port: 3000
  },
  optimization: {
    minimize: true,
    minimizer: [
      new TerserPlugin({
        include: /\.min\.js$/
      })
    ]
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /\.js$/,
        use: 'babel-loader',
        exclude: path.resolve(__dirname, 'node_modules/')
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        use: [{
          loader: 'url-loader',
          options: {
            limit: 10000,
            name: 'images/[name].[ext]'
          }
        }],
        exclude: path.resolve(__dirname, 'node_modules/')
      },
      {
        test: /\.(woff|woff2|svg|eot|ttf|otf)$/,
        exclude: path.resolve(__dirname, 'node_modules/'),
        use: [{
          loader: 'file-loader',
          options: {
            limit: 10000,
            name: 'fonts/[name].[ext]'
          }
        }]
      },
      {
        test: /\.css$/,
        use: [
          'vue-style-loader',
          { loader: 'css-loader', options: { importLoaders: 1 } }
        ],
        exclude: path.resolve(__dirname, 'node_modules/'),
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: path.resolve(__dirname, '../view/index.html')
    }),
    new VueLoadPlugin()
  ],
  resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': path.resolve(__dirname, '../src'),
    }
  }
}

前端其他的工程化应用

git hook 工具

配置 test 命令

// 配置了test命令,当执行test命令的时候,执行代码错误修复和单元测试
"scripts": {
  "serve": "webpack-dev-server --config build/webpack.dev.config --color --progress",
  "build": "webpack --config build/webpack.build.config.js",
  "lint": "eslint",
  "test: unit": "jest",
  "test": "npm run lint && npm run test:unit"
}

配置husky命令

安装
npm install -D husky
配置

{
  "husky": {
    "hooks": {
      "pre-commit": "npm run test", // 在commit之前先执行npm run test命令
      "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS" // 校验commit时添加的备注信息是否符合我们要求的规范
    }
  }
}

standard version 标准化版本管理工具

这种工程化配置多用于插件开发和npm包开发

安装

npm i -g standard-version

使用

{
  "scripts": {
    "release": "standard-version"
  }
}

运行步骤和配置

  • commit 时候创建tag
  • 自动生成 changlog.md 和 更改 package.json 版本
  • push 代码时候将生成的 changlog.md 和 更改 package.json 一并提交

配置

// .versionrc
{
  "skip": { // 跳过的步骤
    "changelog": true
  }
  "types": [
    {"type": "chore", "section":"Others", "hidden": false},
    {"type": "revert", "section":"Reverts", "hidden": false},
    {"type": "feat", "section": "Features", "hidden": false},
    ...
  ]
}

发布自动化

发布包的时候 每次都要 npm login 非常麻烦,可以使用 shelljs 来自动登录,话不多说,直接上代码

// npm_login.js
const shell = require('shelljs')
function npmLogin () {
  const username = '***';
  const password = '***';
  const email = '****';
  const inputArray = [
    username + "\n",
    password + "\n",
    email + "\n",
  ]

  const child = shell.exec('npm login', { async: true })

  child.stdout.on('data', (chunk) => {
    const cmd = inputArray.shift();
    if (cmd) {
      shell.echo("input " + cmd);
      child.stdin.write(cmd);
    } else {
      child.stdin.end();
    }
  })
}
npmLogin()
// package.json 配置上即可

"scripts": {
  "publish": "node ./npmlogin && npm publish"
}

这样一来发布包的时候再也不用手动登录了

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:45:45  更:2021-10-07 13:47:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 1:04:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码