• Webpack快速入门


    博客:姜瑞涛的官方网站
    原文链接:https://www.jiangruitao.com/webpack/quick-start/
    版权采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议 转载需注明原文作者、链接与版权协议

    本篇我们配置最简单的Webpack前端工程,来快速入门Webpack整个打包流程。

    一、Webpack的安装与命令行打包

    配套代码是github仓库 https://github.com/jruit/webpack-tutorial 的webpack1-1例子

    Webpack依赖Node.js,没有安装的话,去官网下载安装LTS稳定版本的Node.js。

    在本地新建一个文件夹webpack1-1,在该文件夹下执行命令行

      npm init -y
    

    该命令会初始化一个npm项目并使用默认参数创建package.json文件。

      npm install --save-dev webpack@4.43.0    webpack-cli@3.3.12    
    

    该命令安装了指定版本的webpack与webpack-cli。这两个npm包作用如下,webpack是webpack核心包,webpack-cli是命令行工具包,在用命令行执行webpack的时候需要安装。详细的安装过程会在Webpack安装一节进行讲解,请尽量安装与教程版本一致的包。

    我们代码逻辑很简单,在一个JS文件里定义一个字符串,然后在另外一个JS文件引入该文件并把字符串内容输出在浏览器控制台里。

    项目下的主要文件如下:

    |--a.js
    |--b.js
    |--index.html
    |--package.json

    a.js内容

      // ES6的模块化语法
      import { name } from './b.js';  
      console.log(name);
    

    b.js内容

      // ES6的模块化语法
      export var name = 'Jack';
    

    HTML文件更简单,只是用来引入JS文件。

    如果我们直接在本地HTML文件里引入a.js,浏览器会报错,一方面是浏览器对原始的ES6模块默认引入方式不支持而报错,另一方面即使使用支持的方式引入也会因本地JS引入的安全问题而报错。

    所以,我们可以通过Webpack把这两个文件打包成一个JS文件来解决这个问题。Webpack打包后,代码里就没有这种模块化语法了。

    我们执行命令

      npx webpack a.js -o bundle.js   
    

    上面命令的作用:从a.js文件开始,按照模块引入的顺序把所有代码打包到bundle.js文件里。Webpack会自动处理打包后代码的顺序与依赖关系。-o是out的意思,表示输出。注意,webpack是打包命令,后面的是打包参数。

    现在我们在HTML文件里引入bundle.js,打开浏览器控制台,正常输出字符串'Jack'。(如果你觉得HTML还是会从a.js和b.js读取内容,你可以把这两个文件删除试一下,你会发现这两个文件已经没有作用了。)

    上面就是一个最简单的Webpack打包过程。打包后的bundle.js代码目前是压缩后的,后面会讲解怎样不压缩打包后的代码。

    我们在执行上面命令的时候,命令行控制台会出现警告信息,告诉我们没有设置'mode'项,Webpack将会使用默认的'production'。我们可以在上面的命令后面配上'mode'项,但当命令参数过长的时候,使用起来就会不方便。此时,我们可以选择使用Webpack的配置文件。

    二、Webpack的配置文件

    Webpack默认的配置文件是项目根目录下的webpack.config.js,在我们执行下方命令的时候,

      npx webpack  
    

    Webpack会自动寻找该文件并使用其配置信息进行打包。

    现在我们在文件夹下新建webpack.config.js文件,里面的代码如下

      var path = require('path');  
    
      module.exports = {
        entry: './a.js',
        output: {
          path: path.resolve(__dirname, ''),
          filename: 'bundle.js'
        },
        mode: 'none'
      };
    

    配套代码是github仓库 https://github.com/jruit/webpack-tutorial 的webpack1-2例子

    命令行执行npx webpack后,Webpack就开始打包了。配置文件里的代码解释:

    因为Webpack是基于Node.js执行的,所以可以使用Node的功能。path是Node.js里的路径解析模块,你可以将其看成是一个JS普通对象,该对象有一些方法可以供我们使用。我们现在使用了其resolve方法,该方法的作用是将方法参数解析成一个绝对路径返回。__dirname是Node.js的一个全局变量,表示当前文件的路径。这样,path.resolve(__dirname, '')表示的其实就是当前文件夹根目录的绝对路径。

    module.exports是CommonJS模块导出语法,导出的是一个对象,该对象的属性就是Webpack打包要使用的参数。entry是Webpack构建的入口文件,我们的入口文件是a.js。output是打包后资源输出文件,其中path表示输出的路径,filename表示输出的文件名,现在我们把打包后的文件输出在当前目录的bundle.js。

    mode是Webpack的打包模式,默认是'production',表示给生产环境打包的。现在我们设置成'none',这样代码就不会压缩了。

    现在,我们就学会了Webpack命令行参数打包与配置文件打包两种打包方法。在我们实际项目中,我们都是使用配置文件打包的。简单的项目我们使用默认的webpack.config.js文件,复杂的项目可能会区分开发环境、测试环境与线上环境分别使用不同的配置文件,这些后续章节再讲。

    三、小结

    1.这节课我们主要学习了Webpack最简单的打包方式,希望通过本节课可以对Webpack打包有一个初步的认识。后续章节,我们将学习预处理器loader和插件等相关知识。

    1.如果安装npm包慢的话,通过以下命令设置npm镜像源为淘宝npm后再安装

      npm config set registry https://registry.npm.taobao.org
    

    2.npx webpack a.js -o bundle.js命令里npx是新版Node里附带的命令。它运行的时候默认会找到node_modules/.bin/下的路径执行。分别与下面的命令等效。

    linux/unix命令行:

      node_modules/.bin/webpack a.js -o bundle.js
    

    windows的cmd命令行(webpack1-1在D:jiangruitao路径下):

      D:jiangruitaowebpack1-1
    ode_modules.binwebpack a.js -o bundle.js 
    

    3.要真正掌握path.resolve的解析规则需要一些时间来练习,但这份Webpack教程只会用于解析简单的资源出口路径,也就是把两个路径参数用字符串连接起来就行了。如果你不想深入Node项目开发,暂时没必须要去研究path.resolve。

  • 相关阅读:
    音视频入门-06-代码画图时间
    音视频入门-05-RGB-TO-BMP使用开源库
    音视频入门-04-BMP图像四字节对齐的问题
    音视频入门-03-RGB转成BMP图片
    控制input文本框只能输入正整数(H5)
    微信小程序自定义导航栏配置(顶部栏搜索框)
    React-日历组件(原生JS代码)
    package.json文件详解
    解决HTML5IOS拍照上传图片逆时针旋转90度问题(React)
    项目细节
  • 原文地址:https://www.cnblogs.com/zhansu/p/14810629.html
Copyright © 2020-2023  润新知