美文网首页
webpack 系统学习(1)

webpack 系统学习(1)

作者: super静_jingjing | 来源:发表于2018-08-21 18:04 被阅读0次

简介:webpack是一个给js准备的打包工具,官方的定义也就是一个打包器。它可以把很多的模块打包成很少的静态文件。webpack有一个自己的特性,就是代码分割;代码分割使得项目在加载时只加载当时需要的一些文件;

webpack安装和命令行:
在命令行中cd到需要安装webpack的目录下,初始化npm:

npm init

初始化完成之后可以安装webpack;现在安装的webpack都是4.X的,安装了4.x的都要安装webpack-cli才能打包成功

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

下面就来写一些代码来使用webpack进行打包:
1.新建一个hello.js

function hello(str){
    alert(str);
}
hello("hello world!");
  1. 打包命令
webpack hello.js -o hello.bundle.js
image.png
  1. 引入新文件(world.js),进行打包
require('./world.js')
function hello(str){
    alert(str);
}
hello("hello world!");
image.png
  1. 在js中引入css文件,并且进行打包
    引入打包css需要依赖一些loader,分别是css-loader和style-loader
npm install css-loader style-loader --save-dev

并且在导入时也要注意,需要添加loader

require('css-loader!style-loader!./style.css')
image.png

也可以不在引入的时候指定loader,在命令行中指定

require('./style.css')

使用命令:

webpack hello.js -o hello.bundle.js --module-bind 'css=style-loader!css-loader'
image.png

5.打包的一些参数
--watch 更新自动打包
--progress 显示打包进度
--display-reasons 显示打包的原因

建立项目的webpack的配置文件
首先需要了解webpack配置文件的4个概念:入口,输出,loader,插件
入口:webpack 应该使用哪个模块作为打包的开始
输出:就是打包完成之后生成的文件应该存在在哪里
loader:就是一些非js文件需要依赖的loader
插件:可以require一些插件,然后添加到plugins中,可以使得执行更广的业务;
写配置文件的目的就是方便打包;
配置文件默认的名字:webpack.config.js

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

}

直接执行webpack:


image.png

在dist中会生成bundle.js


image.png

如果配置文件名不是webpack.config.js,改成webpack.xj.config.js
使用命令:

 webpack --config webpack.xj.config.js
image.png

如果在打包时想输入一些参数,需要在package.json中配置:


image.png

执行:npm run webpack


image.png

多个入口文件的配置:

const path = require('path')
module.exports = {
    entry: {
        main:'./src/script/main.js',
        a:'./src/script/a.js',
    },
    output:{
        path:path.join(__dirname,'./dist/js'),
        filename:'[name]-[hash].js'
    }
}

将entry设置成对象形式,就可以配置多个入口文件;拥有多个入口文件就要有多个输出;
[name] -- 指代entry中的对象key
[hash] -- 指代打包时生成的hash值


image.png
image.png

html-webpack-plugin插件:

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

在配置文件中将插件引入:


image.png

重新打包完成之后会生成两个打包后的js+1个html,在html中会将生成的两个js引入


image.png
image.png

但是打包生成的index.html和我们自己创建的index.html没有任何关系,我们需要将他们建立关系,方法很简单:设置好模版即可


image.png

插件其他参数的使用:
filename::命名生成的html的文件名
inject:指定生成的脚本放在哪里,一般常用的就是"head"或者"body"
title: 设置html 的title,使用<%= %>的方式获取title值


image.png image.png
image.png

也可以用这种方式查看是有的htmlWebpackPlugin

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <% for(var key in htmlWebpackPlugin){%>
        <%= key  %>
    <%}%>
    ------------------------------------------
    <% for(var key in htmlWebpackPlugin.files){%>
        <%= key  %> : <%=  JSON.stringify(htmlWebpackPlugin.files[key])%>
    <%}%>
    ------------------------------------------
    <% for(var key in htmlWebpackPlugin.options){%>
        <%= key  %> : <%=  JSON.stringify(htmlWebpackPlugin.options[key])%>
    <%}%>
  </body>
</html>

重新打包之后生成的html结果:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>test config file title </title>
  <script type="text/javascript" src="main-4e082b2fc9be4cc4a21f.js"></script><script type="text/javascript" src="a-4e082b2fc9be4cc4a21f.js"></script></head>
  <body>
    
        files
    
        options
    
    ------------------------------------------
    
        publicPath : ""
    
        chunks : {"main":{"size":60,"entry":"main-4e082b2fc9be4cc4a21f.js","hash":"68ddd569f8e6fd8a323c","css":[]},"a":{"size":17,"entry":"a-4e082b2fc9be4cc4a21f.js","hash":"29cc8bc883ed375fa050","css":[]}}
    
        js : ["main-4e082b2fc9be4cc4a21f.js","a-4e082b2fc9be4cc4a21f.js"]
    
        css : []
    
        manifest : 
    
    ------------------------------------------
    
        template : "/Users/emma/Desktop/personal/myself/study/webpack/webpack-demo/node_modules/html-webpack-plugin/lib/loader.js!/Users/emma/Desktop/personal/myself/study/webpack/webpack-demo/index.html"
    
        templateParameters : 
    
        filename : "index-[hash].html"
    
        hash : false
    
        inject : "head"
    
        compile : true
    
        favicon : false
    
        minify : false
    
        cache : true
    
        showErrors : true
    
        chunks : "all"
    
        excludeChunks : []
    
        chunksSortMode : "auto"
    
        meta : {}
    
        title : "test config file title "
    
        xhtml : false
    
  </body>
</html>

其实到这一步我们就可以看出我们可以直接在script中使用<%= %>引入打包的文件,并且将配置文件中的inject改为false;

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title><%= htmlWebpackPlugin.options.title %></title>
    <script type="text/javascript" src="<%= htmlWebpackPlugin.files.chunks.main.entry %>"></script>
  </head>
  <body>
    <script type="text/javascript" src="<%= htmlWebpackPlugin.files.chunks.a.entry %>"></script>>
  </body>
</html>

打包结果:


image.png

output 中的 pulicPath:占位符,如果需要上线,对这个值进行了设置,那么在html文件中引用的js的路径就是以这个path开头的绝对路径;
minify:对生成的html进行压缩

相关文章

  • webpack 系统学习(1)

    简介:webpack是一个给js准备的打包工具,官方的定义也就是一个打包器。它可以把很多的模块打包成很少的静态文件...

  • webpack4配置记录

    webpack学习笔记 一、 学习webpack 1. webpack基本环境 npm init -y cnpm ...

  • Vue之Webpack学习

    七、Webpack学习 目录:什么是Webpack、安装Webpack、使用Webpack 1.什么是Webpac...

  • 【01】webpack4.0教程_基础_1

    学习webpack4.0的笔记,循序渐进,后续会再做系统总结 [toc] webpack安装 总结 安装本地的we...

  • webpack学习(1)

    概念 webpack是现在JavaScript应用程序打包生成器。当webpack在处理程序的时候,会递归的构建依...

  • webpack学习1

    1 什么是webpack Webpack 是一个前端资源的打包工具,它可以将js、image、css等资源当成一个...

  • 你一定喜欢看的 Webpack 2.× 入门实战

    最近在学习 Webpack,网上大多数入门教程都是基于 Webpack 1.x 版本的,我学习 Webpack 的...

  • 2019-11-30

    开篇 很多人都或多或少使用过 webpack,但是很少有人能够系统的学习 webpack 配置,遇到错误的时候就会...

  • webpack解惑

    1、webpack的模块化原理webpack 本身维护了一套模块系统,这套模块系统兼容了所有前端历史进程下的模块规...

  • Webpack5 搭建一个简易的 React+TS 开发环境

    之前入行前端系统学习过 Webpack,那时候的版本是 4,当时对 Webpack 的印象就是简单,但绝不易上手,...

网友评论

      本文标题:webpack 系统学习(1)

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