webpack安装配置与常见使用过程详解(结合vue)


Posted in Javascript onJune 01, 2020

webpack介绍和安装

webpack:前端模块化打包工具

安装webpack需要安装Node.js,Node.js自带软件包管理工具npm

查看自己的node版本:

node -v

全局安装webpack

cnpm install webpack -g

查看webpack版本

webpack --version

局部安装webpack

cnpm install webpack --save-dev

为什么全局安装之后还需要局部安装?

在终端直接执行webpack,使用的是全局webpack

如果在package.json中定义了script,其中包含了webpack命令,那么使用的是局部webpack

webpack基本使用过程

小案例:创建一个webpack目录,在里面创建dist目录和src目录

在src目录中创建mathUtils.js和main.js

mathUtils.js

function add(num1, num2){
 return num1 + num2;
}

function mul(num1, num2){
 return num1 * num2;
}

module.exports = {
 add, mul
}

main.js

const {add, mul} = require('./mathUtils.js');

console.log(add(2, 3));
console.log(mul(4, 5));

使用webpack将两个js打包

webpack ./src/main.js ./dist/bundle.js

报错:

ERROR in multi ./src/main.js ./dist/bundle.js
Module not found: Error: Can't resolve './dist/bundle.js' in 'C:\Users\96579\Desktop\webpack'

原因:我的版本是最新的webpack,所以有些命令不一样了

将以上代码修改为:

webpack ./src/main.js -o ./dist/bundle.js

(多了个 -o )

dist目录下成功生成bundle.js

webpack安装配置与常见使用过程详解(结合vue)

webpack.config.js配置和package.json配置

实现:将入口文件和出口文件放置到配置文件中,打包时直接使用简写webpack

npm init

webpack安装配置与常见使用过程详解(结合vue)

在webpack目录中生成了package.json

webpack安装配置与常见使用过程详解(结合vue)

然后输入以下代码,如果在package.json中有一些依赖的包,会自动安装好

cnpm install

webpack安装配置与常见使用过程详解(结合vue)

然后在webpack目录中创建webpack.config.js

const path = require('path');

module.exports = {
 entry: './src/main.js',
 output: {
  path: path.resolve(__dirname, 'dist'),
  filename: 'bundle.js'
 }
}

output中的path要求输入绝对路径,path.resolve用来拼接路径,__dirname获取当前项目的绝对路径

接下来就可以使用webpack来进行打包,不再需要在打包时再加上入口文件和输出文件

webpack安装配置与常见使用过程详解(结合vue)

实现:将webpack映射到npm run build

修改package.json,加入映射

webpack安装配置与常见使用过程详解(结合vue)

最新版的写法是:

"dev": "webpack --mode deveplopment",
    "build": "webpack --mode production"

这样的话,webpack执行时默认会先找本地的webpack,再去找全局的webpack

通常项目中,除了安装全局的webpack,每个项目也会有独立的webpack,而刚才我们只安装了全局webpack,因此现在来安装下局部的

并且这个webpack包是开发时的依赖,因此加上--save-dev

cnpm install webpack --save-dev

知识点:只要是在命令行输入webpack,默认都是找的全局。如果是在package.json中添加的映射,默认是找的本地

webpack中使用css文件的配置

安装style-loader和css-loader

cnpm install style-loader --save-dev
cnpm install --save-dev css-loader

配置webpack.config.js

webpack安装配置与常见使用过程详解(结合vue)

代码:

module: {
 rules: [
  {
  test: /\.css$/,
  use: ["style-loader", "css-loader"],
  },
 ],
 },

webpack-less文件的处理

安装less-loader

cnpm install --save-dev less-loader less

配置

module.exports = {
 ...
 module: {
  rules: [{
   test: /\.less$/,
   use: [{
    loader: "style-loader" // creates style nodes from JS strings
   }, {
    loader: "css-loader" // translates CSS into CommonJS
   }, {
    loader: "less-loader" // compiles Less to CSS
   }]
  }]
 }
};

代码如下

webpack安装配置与常见使用过程详解(结合vue)

webpack-图片文件的处理

安装url-loader

cnpm install --save-dev url-loader

配置

module.exports = {
 module: {
 rules: [
  {
  test: /\.(png|jpg|gif)$/,
  use: [
   {
   loader: 'url-loader',
   options: {
    limit: 8192
   }
   }
  ]
  }
 ]
 }
}

【实际开发过程中,一般建议把limit设置成8kb】

注意,当图片大于limit中设置的尺寸时,需要安装file-loader

cnpm install file-loader --save-dev

webpack会把打包好的文件放到dist目录中,需要在webpack.config.js中使用publicPath指定文件的路径

webpack安装配置与常见使用过程详解(结合vue)

然后再运行

npm run build

webpack-ES6转ES5的babel

安装

cnpm install babel-loader@8.0.0-beta.0 @babel/core @babel/preset-env webpack

配置

module: {
 rules: [
 {
  test: /\.js$/,
  exclude: /(node_modules|bower_components)/,
  use: {
  loader: 'babel-loader',
  options: {
   presets: ['@babel/preset-env']
  }
  }
 }
 ]
}

webpack设置vue的配置过程

引入vue.js

cnpm install vue --save

使用vue进行开发测试

main.js

const app = new Vue({ el: '#app', data: { message: 'webpack & vue' }})

index.html

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <title>Document</title>
 </head>
 <body>
 <div id="app">
  <h2>{{message}}</h2>
 </div>
 <script src="./dist/bundle.js"></script>
 </body>
</html>

使用完整版本,修改配置

module.exports = {
 // ...
 resolve: {
 alias: {
  'vue$': 'vue/dist/vue.esm.js' // 用 webpack 1 时需用 'vue/dist/vue.common.js'
 }
 }
}

安装vue-loader和vue-template-compiler

cnpm install -D vue-loader vue-template-compiler

webpack配置

// webpack.config.js
const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
 module: {
 rules: [
  // ... other rules
  {
  test: /\.vue$/,
  loader: 'vue-loader'
  }
 ]
 },
 plugins: [
 // make sure to include the plugin!
 new VueLoaderPlugin()
 ]
}

webpack-横幅plugin的使用

配置webpack.config.js

const webpack = require('webpack')
...
plugins: [
 new webpack.BannerPlugin('最终版权归cyy所有')
 ],

npm run build之后,查看dist目录下的bundle.js

webpack安装配置与常见使用过程详解(结合vue)

webpack-HtmlWebpackPlugin的使用

打包html的plugin

cnpm install --save-dev html-webpack-plugin

配置

const HtmlWebpackPlugin = require("html-webpack-plugin");
...
 plugins: [
 new HtmlWebpackPlugin(),
 ],

运行npm run build,会在dist目录中生成index.html

webpack安装配置与常见使用过程详解(结合vue)

webpack-UglifyjsWebpackPlugin的使用

帮助压缩js

cnpm i -D uglifyjs-webpack-plugin

const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

module.exports = {
 plugins: [
 new UglifyJsPlugin()
 ]
}

不过现在新版本默认生成的bundle.js好像就是压缩过的

webpack-dev-server搭建本地服务器

每次改变代码后,进行npm run build打包,开发效率比较低

webpack提供了一个可选的本地服务器,基于node.js,使用express框架,可以让浏览器实时刷新修改后的效果

cnpm install --save-dev webpack-dev-server

webpack.config.js

webpack安装配置与常见使用过程详解(结合vue)

package.json

webpack安装配置与常见使用过程详解(结合vue)

npm run start 开启服务

浏览器自动调用localhost:8080

修改代码,不用再重复代码,已经可以看到浏览器的内容实时更新了

webpack配置文件的分离

在webpack目录下创建build目录,放入3个配置的js文件

cnpm install webpack-merge --save-dev

开发时环境 dev.config.js

const webpackMerge = require('webpack-merge')
const baseConfig = require('./base.config')

//开发时
module.exports = (baseConfig, {
 devServer: {
  contentBase: "./dist",
 },
});

生产时环境 prod.config.js

const webpackMerge = require("webpack-merge");
const baseConfig = require("./base.config");
//生产时
const UglifyJsPlugin = require("uglifyjs-webpack-plugin");

module.exports = (baseConfig, {
 plugins: [new UglifyJsPlugin()],
});

公共环境 base.config.js

const path = require("path");
const VueLoaderPlugin = require("vue-loader/lib/plugin");
const webpack = require("webpack");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
 entry: "./src/main.js",
 output: {
  path: path.resolve(__dirname, "dist"),
  filename: "bundle.js",
  publicPath: "dist/",
 },
 module: {
  rules: [
   {
    test: /\.css$/,
    use: ["style-loader", "css-loader"],
   },
   {
    test: /\.less$/,
    use: [
     {
      loader: "style-loader", // creates style nodes from JS strings
     },
     {
      loader: "css-loader", // translates CSS into CommonJS
     },
     {
      loader: "less-loader", // compiles Less to CSS
     },
    ],
   },
   {
    test: /\.(png|jpg|gif)$/,
    use: [
     {
      loader: "url-loader",
      options: {
       //  limit小于8192时,使用base64格式
       //  Limit大于8192时,需要额外安装file-loader
       limit: 8192,
      },
     },
    ],
   },
   {
    test: /\.js$/,
    exclude: /(node_modules|bower_components)/,
    use: {
     loader: "babel-loader",
     options: {
      presets: ["@babel/preset-env"],
     },
    },
   },
   {
    test: /\.vue$/,
    loader: "vue-loader",
   },
  ],
 },
 plugins: [
  // make sure to include the plugin!
  new VueLoaderPlugin(),
  new webpack.BannerPlugin("最终版权归cyy所有"),
  new HtmlWebpackPlugin(),
 ],
 resolve: {
  alias: {
   vue$: "vue/dist/vue.esm.js", // 用 webpack 1 时需用 'vue/dist/vue.common.js'
  },
 },
};

删除原先项目目录下的webpack.config.js

修改package.json指定配置文件

webpack安装配置与常见使用过程详解(结合vue)

此时打包后的文件会在build目录下的dist目录中,如果还是想生成到项目目录下的dist目录中,就需要修改base.config.js中的路径

webpack安装配置与常见使用过程详解(结合vue)

总结

到此这篇关于webpack安装配置与常见使用过程详解(结合vue)的文章就介绍到这了,更多相关webpack安装配置使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 组件之旅(四):测试 JavaScript 组件
Oct 28 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
Feb 23 Javascript
jQuery简单图表peity.js使用示例
May 02 Javascript
JavaScript基于原型链的继承
Jun 22 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
Jul 08 Javascript
关于angularJs指令的Scope(作用域)介绍
Oct 25 Javascript
JS给Array添加是否包含字符串的简单方法
Oct 29 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
Aug 25 Javascript
关于jQuery里prev()的简单操作代码
Oct 27 jQuery
Vue开发Html5微信公众号的步骤
Apr 11 Javascript
vue+Element实现搜索关键字高亮功能
May 28 Javascript
JavaScript使用setTimeout实现倒计时效果
Feb 19 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
Jun 01 #Javascript
el-table树形表格表单验证(列表生成序号)
May 31 #Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
May 31 #Javascript
使用原生JS实现滚轮翻页效果的示例代码
May 31 #Javascript
24个ES6方法解决JS实际开发问题(小结)
May 31 #Javascript
公众号SVG动画交互实战代码
May 31 #Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
May 31 #Javascript
You might like
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
更改localhost为其他名字的方法
2014/02/10 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
JS canvas实现画板和签字板功能
2021/02/23 Javascript
python记录程序运行时间的三种方法
2017/07/14 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
手机配件第一品牌:ZAGG
2017/05/28 全球购物
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
计算机应用专业推荐信
2013/11/13 职场文书
国际贸易个人求职信范文
2014/01/04 职场文书
党支部特色活动方案
2014/08/20 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
学校食堂管理制度
2015/08/04 职场文书