美文网首页
基础学习 webpack的配置

基础学习 webpack的配置

作者: 小本YuDL | 来源:发表于2019-08-07 22:14 被阅读0次

今天学习webpack,虽然只学了很基础的部分,但是我觉得有必要记下来,配置也挺折腾的。


1.webpack的优点

  • webpack能够处理js文件的相互依赖关系,将所有小文件打包成一个或多个大文件
  • webpack能够处理js的兼容性 能够将高级浏览器不识别的语法 转换成低级浏览器能够识别的语法

2.开始配置

2.1 建项目基本目录

index.html中调用main.js ,引入css等文件,会使加载速度变慢,所以要用webpack
将所有的资源加载,导包等全放入入口文件 main.js文件。

现在从头开始,像平常一样写:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="main.js"></script>  记住这里
</head>

下面配置后开始转换写法


2.2 初始化package.json文件

npm init

2.3 安装webpack

npm install webpack --save
npm install webpack-cli --save

2.4 尝试webpack打包文件

终端运行 命令 webpack .\src\main.js --output .\dist\bundle.js
将main.js 打包的资源放在 bundle.js文件中,则在dist 目录下会自动生成一个bundle.js 文件。

此时 引入文件也就改变啦,index.html文件应该引入打包后的js文件,可以提高加载速度

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../dist/bundle.js"></script>  记住这里
</head>

注意:这样写法很繁琐,可以直接进行下面这步,直接写入配置文件,更清晰

2.5 配置 webpack.config.js

  • 入口entry / 出口 output文件
const path = require('path');
module.exports ={
    entry:path.join(__dirname,'./src/main.js'),
    output: {
        path:path.join(__dirname,'./dist'), //指定哪个目录 打包哪个文件
        filename: "bundle.js"  // 指定住处文件名
    }
};

配置好文件,终端输入命令 webpack即可 看到如下结果

image.png

上面方法,每次修改文件都需要输入 webpack 太麻烦,现在 可以安装自动打包编译的工具

2.6 配置 webpack-dev-server 自动打包编译工具

npm install webpack-dev-server -D

webpack-dev-server 会帮忙打包生成 bundle.js文件,所以引入js文件方式又变了

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/bundle.js"></script>  记住这里
</head>

为什么可以直接在根目录下引用呢?

webpack-dev-server 会帮忙打包生成的bundle.js文件,但没有存放到 实际的物理磁盘dist上,而是直接托管到 电脑内存中,所以在我们项目的根目录底下,根本找不到打包好的 bundle.js, 所以引入文件的时候得引根目录下面的虚拟bundle.js文件(有点绕)。
目的就是快,因为内存的运行速度比物理磁盘快

2.7 配置 package.json 文件 实现自动编译

"scripts": {
   "test": "echo \"Error: no test specified\" && exit 1",
   "dev": "webpack-dev-server"   加上这句
 },

然后每次终端输入npm run dev就可以运行了,点击终端给的 http://localhost:8080就可以看到自己内容

2.8 设置自动编译的自启服务的方法:

1. 全部配置到 webpack.config.js文件
devServer: {
       open:true,
       port:3030,
       contentBase:'src',
       hot:true
}

或者:配置到package.json文件
"scripts": {
   "test": "echo \"Error: no test specified\" && exit 1",
   "dev": "webpack-dev-server --open --port 3030 --contentBase src --hot",
 },

输入 npm run dev可以直接运行,到你需要的页面,
参数:
--port :是默认自动打开浏览器
--port 3030:是修改服务器的端口号为 3030
--contentBase src :是自动定位,打开src底下的 index.html 文件
--hot: 实现网页异步加载 不刷新

2.9 webpack.config.js 中配置在内存中生成html页面的插件,将html页面也存储到内存上

  1. 安装npm install html-webpack-plugin -D
    2.配置:plugins
const htmlWebpackPlugin = require('html-webpack-plugin');
module.exports ={
  ......
  plugins: [
        new htmlWebpackPlugin({
            template:path.join(__dirname,'./src/index.html'),  //指定模板文件路径
            filename: 'index.html'  //设置生成的内存页面存储名称
        })
    ],
}

注意:配置 在内存页生成面 的 plugins
优点:
1. 自动在内存中根据指定的页面生成一个内存页面
2. 自动 把打包好的 bundle.js 追加到页面中 不需要在页面中引入 bundle.js文件了

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    无需再调用
</head>

然后运行 npm run dev就可以实现基本的加载了

2.10 配置第三方模块 各种loader (例如:css /img /font)

原因:webpack 默认只能打包js类型的文件, 无法处理其他类型的文件
若要处理非js文件 需要手动安装第三方的加载器 安装各种需要的loader:

module:{
   rules:[
       {test:' 正则匹配',use:[ 使用的安装的模块]
    ]
}
  • 加载css 文件

    • npm install style-loader css-loader -D
    • { test:/\.css$/, use:['style-loader', 'css-loader']}
  • 加载img

    • 默认情况下:webpack不能处理css中的URl地址,不管是图片,还是字体
      需要导入url-loader file-loader,要在webpack.config.js中配置 module
      图片会自动转换成base64编码
    • npm install url-loader file-loader -D
    • { test:/\.(jpg|png|gif|bmp|jpeg)$/, use:'url-loader?limit=99948&name=[hash:8]-[name].[ext]'}
    • limit给定的值是图片大小, 单位是type,如果我们引用的图片大于等于 limit则会转换为base64 但小于则不会转换成base64
    • name=[name].[ext] 设置编译后不自动分配名字, 保持原来图片的名字
  • 加载字体

    • {test:/\.(ttf|eot|svg|woff|woff2)$/,use:'url-loader'}
第三方模块加载器
 module:{
    //第三方模块 匹配规则
   rules: [
     //test的值是正则表达式匹配 
     //use:配置处理应用多个 loader 和选项 从后往前匹配
      css文件匹配处理  
      { test:/\.css$/,use:['style-loader', 'css-loader']},
       处理图片路径的loader
      {test:/\.(jpg|png|gif|bmp|jpeg)$/,use:'url-loader?limit=99948&name=[hash:8]-[name].[ext]'},
       处理字体的loader
       {test:/\.(ttf|eot|svg|woff|woff2)$/,use:'url-loader'}
   ]
}


最后看下:main.js 文件内容:
入口文件中引入资源的方法:

  • js包: import $ from '包名'
  • css文件: import '路径'


    主要是包及文件导入的方法

    看下结果:


    注意运行的是本地服务器地址

3.总结

    1. npm init
    1. npm i webpack --save
    1. npm i webpack-cli --save
    1. 配置 webpack.config.js 中入口entry /出口 output 文件
    1. npm i webpack-dev-server -D
    1. 配置 webpack.config.js 中的服务运行 devServer
    1. npm i html-webpack-plugin -D 导入在内存中生成HTML页面的插件
    1. 配置 webpack.config.js 中 在内存页生成面 的 plugin 优点 页面无需调用 bundle.js
    1. 运行 npm run dev 基本的js+html 就可以渲染加载了
  • 10.配置第三方模块 各种loader
    • eg:css,less文件加载
    • (1) 创建 index.css文件
    • (2) npm install style-loader css-loader -D
    • (3) 配置 webpack.config.js 文件中的 module模块 中的rules 级第三方模块的匹配规则
  • 11.完成基本操作

配置完上面这些 ,那基本的 html、css、js就可以结合在一起啦,输入命令npm run dev,就可以看到效果啦。其实配置一步步还挺复杂的。因为第一次会出各种各样的问题,还是要总结,虽然可能用的比这个更多更难,但是一切都应该有个扎实的开始。

加油!!!

相关文章

网友评论

      本文标题:基础学习 webpack的配置

      本文链接:https://www.haomeiwen.com/subject/hgtodctx.html