五、webpack基础

webpack基础

一、安装

  1. webpack基于node环境
  2. 使用npm安装3.6.0,用于手动配置管理学习,后期可以安装新版本
npm install webpack@3.6.0 -g   //全局安装
npm install webpack@3.6.0 --save-dev   //开发时依赖

二、起步

  1. 项目中一般包含两个文件:src用来存放源码,dist打包的东西存放位置
  2. 打包命令main.js是需要打包的js,bundle.js是打包成的js
webpack main.js bundle.js
  1. 测试代码

    需运行网页服务器,解决跨域问题才能正常显示

    1. test.js

      function add(num1,num2){
          return num1+num2
      }
      
      export {add}
      export let aaa = "bbbbbbbbbbbb";
      
    2. main.js

    import {add,aaa} from "./test.js"
    
    console.log(aaa);
    console.log(add(10, 20));
    
    
    1. 打包
    webpack main.js ../dist/bundle.js
    

三、配置文件

  1. 默认配置文件名为webpack.config.js,配置出入口文件
const path = require('path') //使用node获取当前路径,使用node时要初始化配置,npm init,npm install,执行后会生成package.json文件

module.exports = {
    entry: './src/main.js', //入口文件
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js'
    },//出口文件
}
  1. package.json npm的配置文件,通过该文件使npm命令和webpack命令映射
{
  "name": "testproject",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
      "build": "webpack" //优先执行本地命令
  },//npm 的执行脚本
  "author": "",
  "license": "ISC"
}

四、CSS配置,使用loader扩展

可使用loader对webpack进行扩展 loader下载配置地址

  1. 通过npm安装
npm install --save-dev style-loader
npm install --save-dev css-loader
npm install less less-loader --save-dev less
npm install --save-dev url-loader
npm install --save-dev file-loader
npm install --save vue

//Module build failed: TypeError: this.getOptions is not a function报错时,可尝试安装低版本
npm install css-loader@2.0.2 --save-dev
npm install style-loader@0.23.1  --save-dev
npm install less less-loader@5.0.0 --save-dev less
npm install --save-dev url-loader@2.0.0
npm install --save-dev file-loader@2.0.0
npm install --save vue@2.5.21
  1. 在webpack.config.js中modules关键字下进行配置
module.exports = {  module: {    rules: [      {        test: /\.css$/i,        use: ["style-loader", "css-loader"],      },    ],  },};
  1. require(’./css/normal.css’)

五、less

module.exports = {  module: {    rules: [      {        test: /\.less$/i,        loader: [          // compiles Less to CSS          'style-loader',          'css-loader',          'less-loader',        ],      },    ],  },};

六、image

配置文件

{            test: /\.(png|jpg|gif)$/,            use: [              {                loader: 'url-loader',                options: {                  limit: 8192,                  name:" img/[name].[hash:8].[ext]"                }              }            ]          },
  1. 配置文件中options对象有一个属性limit,表示图片大小低于该大小的的图片,将以base64编码的方式显示。
  2. 超过该大小的图片还需安装file-loader,才能显示,并且在output中配置publicPath,配置图片转换位置
  3. 大于limit规定的图片,转换后的图片命名方式按name属性命名

完整配置文件如下:

const path = require('path')module.exports={    entry: './src/main.js',    output: {        path: path.resolve(__dirname, 'dist'),        filename: "bundle.js",        publicPath:"dist/"    },    module: {        rules: [          {            test: /\.css$/i,            use: ["style-loader", "css-loader"],          },          {            test: /\.less$/i,            loader: [              // compiles Less to CSS              'style-loader',              'css-loader',              'less-loader',            ],          },          {            test: /\.(png|jpg|gif)$/,            use: [              {                loader: 'url-loader',                options: {                  limit: 8192,                  name:" img/[name].[hash:8].[ext]"                }              }            ]          },        ],      },}

七、Vue配置

  1. 安装时不需要加-dev
npm install vue --save
  1. 导入vue
import Vue from 'vue'
  1. 使用Vue
  2. 直接使用会报错,runtime-only错误,改版本不能使用任何版本的template,runtime-compiler代码才可以编译template,解决:在webpack配置文件中增加下边代码指定使用的版本:
module.exports={    entry:,    output:{},    module:{},    resolve: {      alias:{        'vue$': 'vue/dist/vue.esm.js'      }    }}

八、el和template的区别

当vue对象中既有el,又有template时,在vue运行时,会将el绑定的前端对象内容替换为template的内容

九、Vue loader

npm install --save vue@2.5.21 npm install --save-dev vue-loader vue-template-compiler

webpack.config.js配置

{    test: /\.vue$/,    use: ['vue-loader']}

缺少插件报错,安装vue-loader 13.0.0版本

如果想省略导入后缀名,可在webpack配置文件中的resolve对象中定义extensions对象:[’.js’,’.css’,’.vue’]

十、plugin插件

  1. BannerPlugin,横幅插件,添加版权信息

为打包的文件添加版本号、开源声明等信息,webpack.config.js配置信息

const webpack = require('webpack')module.exports = {	...	plugins: [		new webpack.BannerPlugin('最终版权归所有')	]}
  1. html-webpack-plugin 处理index.html文件,自动生成index.html

安装:

npm install html-webpack-plugin@3.2.0 --save-dev

配置:

const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {	...	plugins: [		new webpack.BannerPlugin('最终版权归所有'),		new HtmlWebpackPlugin()	]}

1.应为配置了该插件,之前加的publicPath属性应去掉

2.生成的index.html模板内容缺失,需在配置插件是,为插件配置模板

const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {	...	plugins: [		new webpack.BannerPlugin('最终版权归所有'),		new HtmlWebpackPlugin({			template: 'index.html'		})	]}
  1. uglifyjs-webpack-plugin,js压缩插件

安装:

npm install uglifyjs-webpack-plugin@1.1.1 --save-dev

配置:

const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin')module.exports = {	...	plugins: [		new webpack.BannerPlugin('最终版权归所有'),		new HtmlWebpackPlugin({			template: 'index.html'		}),		new UglifyjsWebpackPlugin()	]}
  1. webpack-dev-server,搭建本地服务器,实时更新预览,服务于摸一个文件夹,监控代码改变,实时在内存编译,执行npm run build时才会编译

安装:

npm install --save-dev webpack-dev-server@2.9.3

配置:

const WebpackDevServer = require('webpack-dev-server')module.exports = {	...	plugins: [		new webpack.BannerPlugin('最终版权归所有'),		new HtmlWebpackPlugin({			template: 'index.html'		}),		new UglifyjsWebpackPlugin(),	],    devServer: {      contentBase: './dist',      inline: true,    }}

运行:

在npm package.json中配置别名

{    "dev": "webpack-dev-server --open"} 

–open会自动打开浏览器

十一、webpack配置分离

把开发时配置和发布时配置进行分离,开发和发布使用不同的配置文件

依赖于webpack-merge插件

安装:

npm install webpack-merge --save-dev

例子:

  1. 在build文件夹新建了一个名为base.config.js、prod.config.js、dev.config.js的配置文件。

    • base.config.js配置基础配置
    • prod.config.js配置发布配置
    • dev.config.js配置开发配置
  2. 分别在prod.config.js中导入base.config.js,并把自身配置和base.conig.js配置进行合并

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

module.exports = webpackMerge(baseConfig,{
    devServer: {
        contentBase: './dist',
        inlien: true
    }
})
  1. 在package.json中的脚本中为执行指定配置文件
"scripts": {
    path: path.resolve(__dirname, '../dist')
    "build": "webpack --config ./build/prod.config.js",
    "dev": "webpack-dev-server --open --config ./build/dev.config.js"
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值