webpack的一些基本使用(loaders)

概念

webpack是一个现代的JavaScript应用程序的静态模块打包器。是处理各个文件之间依赖关系的工具。
当在代码中使用CommonJS模块化规范、ES6模块化规范或其他规范时,可以解决各个文件之间的相互依赖,并且读懂某些规范的含义。
CommonJS模块化规范举例:
导入与导出:

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

ES6模块化规范举例:
导入与导出:

import {name, age, height} from './info.js'   //导入
export const name = 'why'  //导出
export default function() {  //导出默认值
	console.log('18');
}

在没有用webpack前,代码本身是不能识别CommonJS模块化的。利用webpack就可以使浏览器识别模块。

一、webpack的起步

如果自己手动配置项目的话,首先在项目目录下创建两个文件夹,为dist与src文件夹,文件夹中的包含的文件如下:
在这里插入图片描述

在命令行输入:webpack ./src/main.js ./dist/bundle.js,就会在dist文件夹中生成bundle.js文件。
其中,main.js文件表示项目的js入口文件,dist文件夹为项目发布时需要上传到服务器的文件夹,其中的bundle.js文件为输出文件。而index.html文件为运行项目的入口文件。

二、webpack的配置

1.首先使用下载node,利用node环境,以及node本身自带的npm(包管理工具)。
2.在文件夹中创建一个webpack.config.js文件,来配置文件的入口与出口,如下所示:

const path = require('path');

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

3.在命令行输入npm init来生成package.json文件,来进行管理项目运行时所依赖的文件,创建的过程如下所示:(配置选择默认的就可以了)
在这里插入图片描述
获得的package.json文件内容大致如下:

{
  "name": "meetwebpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "-",
    "bulid": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^3.6.0"
  }
}

4.再利用npm install安装项目运行时依赖的文件(如webpack.config.js中的path文件)。
5.此时在终端输入webpack运行,就会发现webpack将生成新的文件即bundle.js文件(在dist文件夹),此时该文件已经解决的各个文件之间的模块依赖。

在package.json文件中输入输入以下代码,可以使在打包文件时,输入npm run build即可
在这里插入图片描述

三、webpack的loader

1.webpack中使用css文件的配置

①首先在src文件夹中创建一个css文件夹;
②在文件夹中创建一个normal.css文件;
③在main.js中用require('./css/normal.css')导入这个文件;
④找到webpack官网1点击中文文档,找到loaders按钮。

在这里插入图片描述
⑤此时会看到关于loaders的简介(webpack可以使用loader来预处理文件); 在这里插入图片描述
⑥找到我们所需要的css-loader,进入之后会发现特别详细的介绍;

安装css-loader

npm install --save-dev css-loader

用法
webpack.config.js

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

⑦再次在命令行运行npm run build就会得到新打包好的文件。

2.webpack-less文件的处理

①在./src/css文件夹中创建special.less文件;
②在main.js文件中利用require('./css/special.less')导入文件;
③找到webpack官网点击中文文档,在loaders模块中找到less-loader;

安装less-loader

npm install --save-dev less-loader less

The less-loader requires less as peerDependency. Thus you are able to control the versions accurately.

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
            }]
        }]
    }
};

④再次在命令行运行npm run build就会得到新打包好的文件
3.webpack-图片文件的处理

①在src文件夹中创建img文件夹,并放入一张图片src/img/cache.jpg,图片大小约为40kb
②在normal.css中利用background: url('../img/cache.jpg');将图片设置为页面背景;
③找到webpack官网点击中文文档,在loaders模块中找到url-loader;

安装url-loader

npm install --save-dev url-loader

webpack.config.js

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

url-loader 功能类似于 file-loader,但是在文件大小(单位 byte)低于指定的限制时,可以返回一个 DataURL。

④因为此时文件的大小大于限制的limit,所以进行编译时会出现错误,此时按照错误提示进行file-loader的安装即可(或将limit设置成大于图片大小,那么此时就不需要安装file-loader);

安装file-loader

npm install --save-dev file-loader

默认情况下,生成的文件的文件名就是文件内容的 MD5 哈希值并会保留所引用资源的原始扩展名。

注:若已经安装了url-loader,则此时不需要再在webpack.config.js中进行配置。

生成文件 file.png,输出到输出目录并返回 public URL。如"/dist/0dcbbaa7013869e351f.png"
其中输出目录需要在webpack.config.js中进行配置,代码如下:(如果不配置publicPath,则打包产生的图片就会直接在src文件夹中,不会存在dist文件夹中,那么发布项目时就得不到想要的效果)

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: 'dist/' //涉及url的文件,都会在地址前加上dist/
  },
  ......
}

此时生成的图片名称是由32位哈希值组成的,比较杂乱无章,可以在配置url-loader时,进行图片命名,代码如下(配置完成后,图片的地址就位于./dist/img/文件夹中):

      {
        test: /\.(png|jpg|gif|jpeg)$/,
        use: [{
          loader: 'url-loader',
          options: {
            //当加载的图片小于limit时,会将图片编译成base64字符串形式
            //当加载的图片大于limit时,需要使用file-loader模块进行加载
            limit: 10000,
            name: 'img/[name].[hash:8].[ext]'
          }
        }]
      }

img:文件要打包到的文件夹
name:获取图片原来的名字,放在该位置
hash:8:为了防止图片名称冲突,依然使用hash,但是我们只保留8位
ext:使用图片原来的扩展名

④再次在命令行运行npm run build就会得到新打包好的文件,预览如下:

在这里插入图片描述
4.webpack-ES6转ES5的babel
①仔细阅读webpack打包的js文件,会发现写的ES6语法并没有转换成ES5,那么意味着可能一些ES6还不支持的浏览器没有办法很好的运行我们的代码
②如果希望将ES6语法转换成ES5,那么就需要使用babel
③找到webpack官网点击中文文档,在loaders模块中找到babel-loader;

安装babel-loader

npm install --save-dev babel-loader@7 babel-core babel-preset-es2015

配置webpack.config.js

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

④再次在命令行运行npm run build就会得到新打包好的文件,查看bundle.js文件,发现其中的内容变成了ES5的语法。

5.webpack使用Vue的配置过程

①希望在项目中使用Vue.js,那么必须需要对其有依赖,所以需要进行安装;

安装vue

npm install vue --save

注:因为后续是在实际项目中也会使用Vue的,所以并不是开发时依赖

②在使用时首先导入Vue;

import Vue from 'vue'  //此行导入vue
// import App from './vue/app.js'
import App from './vue/App.vue'

new Vue({
  el: '#app',
  template: `<App/>`,
  components: {
    App
  }
})

③打包项目并运行程序,出现错误(错误说我们使用的是runtime-only版本的Vue),此时需要在webpack.config.js中添加如下内容即可:

在这里插入图片描述

④再次在命令行运行npm run build就会得到新打包好的文件。

6..vue文件的封装处理
①创建一个.vue文件如下:

<template>
  <div>
    <h2 class="title">{{message}}</h2>
    <button>按钮</button>
    <Cpn></Cpn>
  </div>
</template>

<script>
  import Cpn from './Cpn.vue'
  export default {
    data() {
      return {
        message: 'hello webpack'
      }
    },
    components: {
      Cpn
    }
  }
</script>

<style scoped="scoped">
  .title {
    color: yellow;
  }
</style>

②这个文件不能被正常的加载,所以需要安装vue-loader与vue-template-compiler

安装vue-loader与vue-template-compiler

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

③修改webpack.config.js配置文件如下:

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

④再次在命令行运行npm run build就会得到新打包好的文件。


关于上述所依赖的包的版本如下:

webpack
npm install webpack@3.6.0

css-loader
npm install css-loader@2.0.2 --save-dev

style-loader
npm install style-loader@0.23.1 --save-dev

less-loader
npm install --save-dev less-loader@4.1.0 less@3.9.0

url-loader
npm install --save-dev url-loader@1.1.2

es6转换成es5
npm install --save-dev babel-loader@7.1.5 babel-core@6.26.3 babel-preset-es2015@6.24.1

Vue
npm install vue@2.5.21 --save

  1. webpack中文官网 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值