用webpack4带你实现一个vue的打包的项目

小编 2026-07-01 阅读:901 评论:0
一个用webpack4打包的vue 的项目,参照vue-cli的webpack配置,一步一步带你...

一个用webpack4打包的vue 的项目,参照vue-cliwebpack配置,

一步一步带你实现一个vue的打包的项目,每一个commit对应一个步骤。

github 地址

克隆项目

git clone git@github.com:naihe138/nvue.git

安装依赖

npm install or yarn

一、初始化项目

初始化项目,用vue-loader来打包.vue文件,html-webpack-plugin插件来导出html文件。第一步我们很简单,就利用vue-loaderbabel-loader是把.vue文件打包出来,总共才40多行代码,看build/webpack.base.conf.js文件注释就看的懂。+++表示有省略的代码



module.exports = {  +++  // 模块,loader  module: {    rules: [      {        test: /.vue$/,        loader: 'vue-loader',        exclude: /node_modules/,        include: resolve('src')      },      {        test: /.js$/,        loader: 'babel-loader',        exclude: /node_modules/,        include: resolve('src')      }    ]  }  +++}

运行 webpack --config build/webpack.base.conf.js

二、打包css和图片等资源

这里打包csssass为例,用到了mini-css-extract-plugin插件提取css,用url-loader来处理字体、图片、音频等资源。非常简单。如下代码,+++表示有省略的代码



+++module.exports = {  +++  // 模块,loader  module: {    rules: [      +++      {        test: /.s?css$/,        use: [          MiniCssExtractPlugin.loader,          'css-loader',          'sass-loader'        ]      },      {        test: /.(png|jpe?g|gif|svg)(?.*)?$/,        loader: 'url-loader',        options: {          limit: 10000,          name: 'static/img/[name].[hash:7].[ext]'        }      }      +++    ]  },  // 插件  plugins: [    +++    new MiniCssExtractPlugin({      filename: 'static/css/[name].[hash].css',      chunkFilename: 'static/css/[name].[hash].css'    })  ]}

运行 webpack --config build/webpack.base.conf.js

三、配置热加载、代理等开发环境

通过build/config.js来设置开发配置。如下注释


const path = require('path')module.exports = {  dev: {    assetsSubDirectory: 'static', // 静态文件目录    assetsPublicPath: '/', // 相对文件路径    proxyTable: {},    host: 'localhost',    port: '8000',    autoOpenBrowser: false, // 是否自动打开浏览器    errorOverlay: true, // 浏览器错误提示遮罩层    notifyOnErrors: true, // 编译错误的时候通知提示,需要friendly-errors-webpack-plugin 配合    poll: false,    useEslint: true, // 便宜使用eslint-loader模块    showEslintErrorsInOverlay: false, // eslint浏览器错误提示遮罩层    devtool: 'cheap-module-eval-source-map', // Source Maps    cssSourceMap: true, // css Source Maps    cacheBusting: false, // vue debugg 提示  }}

webpack.dev.conf.js中,通过webpack-dev-server插件来开启热重载服务,同时配置自动补全css兼容代码的插件,postcss-loader

运行npm run dev 或者 yarn dev 就可以启动服务了

四、配置打包环境

通过build/config.js来设置开发配置。如下注释



const path = require('path')module.exports = {  +++  build: {    // html模板    index: path.resolve(__dirname, '../dist/index.html'),    // Paths    assetsRoot: path.resolve(__dirname, '../dist'),    assetsSubDirectory: 'static',    assetsPublicPath: '/',    // 生产环境的souce map    productionSourceMap: false,    devtool: '#source-map',    // 开启静态文件的Gzip压缩    // 如果是true 的话  需要 npm install --save-dev compression-webpack-plugin    productionGzip: false,    productionGzipExtensions: ['js', 'css'],    // 打包完成显示包大小的状态分析    // `npm run build --report`    bundleAnalyzerReport: process.env.npm_config_report  }}

运行npm run build 或者 yarn build 就可以实现打包vue项目啦。

五、检查版本,优化打包输出和Eslint设置

check-version.js中用 shelljs模块检查时候有npm命令,semver模块语义化版本号,然后在build.js合并webpack.prod.conf.js的的配置,然后组在格式化输出。



// 检查时候有安装npm命令if (shell.which('npm')) {  versionRequirements.push({    name: 'npm',    currentVersion: exec('npm --version'),    versionRequirement: packageConfig.engines.npm  })}// 格式化输出process.stdout.write(stats.toString({  colors: true,  modules: false,  children: false,  chunks: false,  chunkModules: false}) + '

')

通过eslint-loader 来配置eslint的检查,建立.eslintrc.js去设置规则

{  test: /.(js|vue)$/,  loader: 'eslint-loader',  enforce: 'pre',  include: [resolve('src')],  exclude: /node_modules/,  options: {    formatter: require('eslint-friendly-formatter'),    emitWarning: !config.dev.showEslintErrorsInOverlay  }},

六、打包优化

1、添加DllPluginDllReferencePlugin来打包优化不变的库,具体看webpack.dll.conf.js文件

2、通过cache-loader来做loader的缓存,

3、通过UglifyJsPluginparallel来开启多线程打包


{    test: /.vue$/,    loader: 'vue-loader',    exclude: /node_modules/,    include: resolve('src'),    options: {      cacheDirectory: resolve('./cache-loader'), // 缓存      cacheIdentifier: 'cache-loader:{version} {process.env.NODE_ENV}'    }},{    test: /.js$/,    use: isProduction ? [      {        loader: 'cache-loader',        options: {          cacheDirectory: resolve('cache-loader'), // 缓存        }      },      'babel-loader'    ] : 'babel-loader',    exclude: /node_modules/,    include: resolve('src')},

先运行npm run dll 然后 npm run build



原文发布时间为:2018年06月20日
原文作者:naice
本文来源: 掘金 如需转载请联系原作者



版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表