博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让webpack更简单
阅读量:6145 次
发布时间:2019-06-21

本文共 2086 字,大约阅读时间需要 6 分钟。

根据自己习惯将webpack封装成一个npm包,不再需要安装任何webpack相关包,甚至不需要任何配置。思路借鉴webpack-cli3umi

发布npm包基础

一、安装必需webpack依赖插件

  • 基础webpack配置依赖有:

    babel、css、less、postcss、file-loader、url-loader、html-webpack-plugin、copy-webpack-pluginnode-sass安装比较慢,不翻墙经常安装失败,这里选择了less】

  • 开发模式依赖有:

    webpack-dev-server

  • 开发模式默认依赖有:

    clean-webpack-plugin、mini-css-extract-plugin、optimize-css-assets-webpack-plugin、uglifyjs-webpack-plugin

注意:

需要npm i 依赖包名 -S安装依赖,这样其他项目引入只需要安装这一个包,就不需要再重新安装此包的依赖

二、webpack.config加入默认配置

具体配置就不展示了,详情请看demo

获取当前项目运行地址: 下边的resolve都是的这个方法

// 获取当前项目运行地址const resolve = (dir) => path.join(process.cwd(), dir)复制代码
  • 设置webpack默认配置:
  1. 打包入口
  2. cdn地址
  3. 输出文件夹
  4. html模板
  5. 输出html地址和名字
  6. proxy 代理地址
  • 用户自定义配置文件:

项目是为了零配置,但特殊情况下还是需要自定义配置。那么就规定一个默认配置文件

// 获取用户webpack配置const userConfig = (() => {  const configPath = resolve('kuan-pack.js') // 获取规定的配置文件地址  if (!fs.existsSync(configPath)) return {}  return require(configPath)})()复制代码

三、将配置npm包设置自定义指令

package.json下的bin中定义指向脚本的文件地址,根据特定参数触发webpack的开发和编译

注意:脚本文件最上方加入#!/usr/bin/env node,说明使用node来运行文件,否则脚本不能运行。

switch (process.argv[2]) {  case 'dev':    // 本地开发    process.env.NODE_ENV = 'development'    const serve = require('../src/dev')    serve()    break  case 'build':    process.env.NODE_ENV = 'production'    const build = require('../src/build')    build()    break  default:    console.error(`Unknown command ${process.argv[2]}`)    process.exit(1)}复制代码

四、kuan-pack

安装

yarn add kuan-pack --dev# ornpm run kuan-pack -D复制代码

开发

kuan-pack dev复制代码

编译

kuan-pack build复制代码

自定义webpack配置

项目根目录加入kuan-pack.js

const path = require('path')module.exports = {  entry: path.resolve(__dirname, 'test'), // 打包入口 默认: src/index.js  publicPath: '', // sdn路径 默认:空  distPath: path.resolve(__dirname, 'dist'), // 输入地址 默认: dist  htmlTemplate: 'index.html', // 模板html 默认:根目录index.html > 内部自定义模板  htmlName: 'index.html', // 输出html路径 默认:'index.html'  proxy: { // 代理地址    '/api': {      target: 'https://luzhongkuan.cn/api',      changeOrigin: true    }  },  config: {    // 会合并到webpack.config  }}复制代码

五、结语

因为个人描述和能力等问题,可能有些地方不正确或者不清楚, 有问题欢迎联系 QQ:869103451

转载于:https://juejin.im/post/5ba64bdbe51d450ea401e376

你可能感兴趣的文章
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>
IOC —— AOP
查看>>
比特币现金将出新招,推动比特币现金使用
查看>>
数据库的这些性能优化,你做了吗?
查看>>
某大型网站迁移总结(完结)
查看>>
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>
MS SQLSERVER通用存储过程分页
查看>>
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>
jq漂亮实用的select,select选中后,显示对应内容
查看>>
C 函数sscanf()的用法
查看>>
python模块之hashlib: md5和sha算法
查看>>
解决ros建***能登录不能访问内网远程桌面的问题
查看>>
pfsense锁住自己
查看>>
vsftpd 相关总结
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>