资讯专栏INFORMATION COLUMN

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

verano / 977人阅读

摘要:一个用打包的的项目,参照的配置,一步一步带你实现一个的打包的项目,每一个对应一个步骤。如下注释模板生产环境的开启静态文件的压缩如果是的话需要打包完成显示包大小的状态分析运行或者就可以实现打包项目啦。

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

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

github 地址 clone project

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

install

npm install or yarn

一、初始化项目

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

</>复制代码

  1. module.exports = {
  2. +++
  3. // 模块,loader
  4. module: {
  5. rules: [
  6. {
  7. test: /.vue$/,
  8. loader: "vue-loader",
  9. exclude: /node_modules/,
  10. include: resolve("src")
  11. },
  12. {
  13. test: /.js$/,
  14. loader: "babel-loader",
  15. exclude: /node_modules/,
  16. include: resolve("src")
  17. }
  18. ]
  19. }
  20. +++
  21. }

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

二、打包css和图片等资源

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

</>复制代码

  1. +++
  2. module.exports = {
  3. +++
  4. // 模块,loader
  5. module: {
  6. rules: [
  7. +++
  8. {
  9. test: /.s?css$/,
  10. use: [
  11. MiniCssExtractPlugin.loader,
  12. "css-loader",
  13. "sass-loader"
  14. ]
  15. },
  16. {
  17. test: /.(png|jpe?g|gif|svg)(?.*)?$/,
  18. loader: "url-loader",
  19. options: {
  20. limit: 10000,
  21. name: "static/img/[name].[hash:7].[ext]"
  22. }
  23. }
  24. +++
  25. ]
  26. },
  27. // 插件
  28. plugins: [
  29. +++
  30. new MiniCssExtractPlugin({
  31. filename: "static/css/[name].[hash].css",
  32. chunkFilename: "static/css/[name].[hash].css"
  33. })
  34. ]
  35. }

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

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

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

</>复制代码

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

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

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

四、配置打包环境

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

</>复制代码

  1. const path = require("path")
  2. module.exports = {
  3. +++
  4. build: {
  5. // html模板
  6. index: path.resolve(__dirname, "../dist/index.html"),
  7. // Paths
  8. assetsRoot: path.resolve(__dirname, "../dist"),
  9. assetsSubDirectory: "static",
  10. assetsPublicPath: "/",
  11. // 生产环境的souce map
  12. productionSourceMap: false,
  13. devtool: "#source-map",
  14. // 开启静态文件的Gzip压缩
  15. // 如果是true 的话 需要 npm install --save-dev compression-webpack-plugin
  16. productionGzip: false,
  17. productionGzipExtensions: ["js", "css"],
  18. // 打包完成显示包大小的状态分析
  19. // `npm run build --report`
  20. bundleAnalyzerReport: process.env.npm_config_report
  21. }
  22. }

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

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

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

</>复制代码

  1. // 检查时候有安装npm命令
  2. if (shell.which("npm")) {
  3. versionRequirements.push({
  4. name: "npm",
  5. currentVersion: exec("npm --version"),
  6. versionRequirement: packageConfig.engines.npm
  7. })
  8. }
  9. // 格式化输出
  10. process.stdout.write(stats.toString({
  11. colors: true,
  12. modules: false,
  13. children: false,
  14. chunks: false,
  15. chunkModules: false
  16. }) + "
  17. ")

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

</>复制代码

  1. {
  2. test: /.(js|vue)$/,
  3. loader: "eslint-loader",
  4. enforce: "pre",
  5. include: [resolve("src")],
  6. exclude: /node_modules/,
  7. options: {
  8. formatter: require("eslint-friendly-formatter"),
  9. emitWarning: !config.dev.showEslintErrorsInOverlay
  10. }
  11. },
六、打包优化

1、添加DllPluginDllReferencePlugin来打包优化不变的库,
2、通过cache-loader来做loader的缓存,
3、通过UglifyJsPluginparallel来开启多线程打包

先运行npm run dll 然后 npm run build

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95549.html

相关文章

  • 带你了解webpack

    摘要:根据依赖关系,按照配置文件把模块函数分组打包成若干个。会随着自身的的修改,而发生变化。只需要在命令行运行时带上参数就搞定一些插件的废除和替换废弃了顶替者用属性变化压缩优化代码分割,下面详解还有一些新的插件,。 1. 前端工程化项目打包历史 前端工程化之前的时代略过 1. 半自动执行脚本来压缩合并文件 自从xmlhttprequest被挖掘出来,网页能够和服务端通讯,js能做的事越来越多...

    senntyou 评论0 收藏0
  • 带你了解webpack

    摘要:根据依赖关系,按照配置文件把模块函数分组打包成若干个。会随着自身的的修改,而发生变化。只需要在命令行运行时带上参数就搞定一些插件的废除和替换废弃了顶替者用属性变化压缩优化代码分割,下面详解还有一些新的插件,。 1. 前端工程化项目打包历史 前端工程化之前的时代略过 1. 半自动执行脚本来压缩合并文件 自从xmlhttprequest被挖掘出来,网页能够和服务端通讯,js能做的事越来越多...

    Tamic 评论0 收藏0
  • 关于Vue2一些值得推荐文章 -- 五、六月份

    摘要:五六月份推荐集合查看最新的请点击集前端最近很火的框架资源定时更新,欢迎一下。苏幕遮燎沈香宋周邦彦燎沈香,消溽暑。鸟雀呼晴,侵晓窥檐语。叶上初阳乾宿雨,水面清圆,一一风荷举。家住吴门,久作长安旅。五月渔郎相忆否。小楫轻舟,梦入芙蓉浦。 五、六月份推荐集合 查看github最新的Vue weekly;请::点击::集web前端最近很火的vue2框架资源;定时更新,欢迎 Star 一下。 苏...

    sutaking 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<