• webpack系列学习01——hello webpack


    自从换新工作后,每天10点上班,6点多下班,20多岁过起了养老的生活。经过一个多月的自我挣扎,终于开始决定每天回家后不能再颓废了。定个目标,每周至少三篇原创博客。自行监督,如果做不到,(再说)。
    就先从webpack下手吧。先说一句,强烈建议看官方文档,这个webpack也有中文版的,而且也不是很难懂,照着敲一边基本上就懂了,我就是这么学的。
    官网传送门:webpack中文网
    如果你不想看官网,fine,跟着这个系列学吧,也不会让你失望的,我拿湖人今年的总冠军奖杯保证。
    本系列教程代码同步更新至github,欢迎围观和star。
    github传送门:https://github.com/JerryYuanJ/webpack-learn
    废话不多说,开始吧。

    新建项目

    创建一个文件夹 01-hello-webpack,然后在根目录下输入命令,npm init 开始项目的初始化。你可以根据提示一步步的填写,最后他会在根目录下根据你的填写内容自动给你生成package.json文件,如果你嫌麻烦,可以直接在 npm init 后面添加参数-y 表示遵循默认配置:

    npm init -y

    我生成的package.json文件如图:

    {
      "name": "01-hello-webpack",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo "Error: no test specified" && exit 1"
      },
      "author": "Jerry",
      "license": "ISC"
    }

    安装webpack

    很简单,在项目根目录下输入命令:

    npm install webpack --save-dev

    提示:install可以简写成 i , --save-dev 可以简写成 -D (大写),所以以上命令也可以写成

    npm i webpack -D

    这时你的package.json中会多出这些:

    "devDependencies": {
        "webpack": "^4.16.2"
    }

    表示我们已经成功安装了版本为4.16.2的webpack了,但是要注意,webpack4以后命令行工具不再集成在webpack包里面了,需要再运行一个安装命令行工具(webpack-cli)的命令,我们可以试试上面的简写:

    npm i webpack-cli -D

    安装结束后它也会出现在devDependencies里面,和webpack相依为命。
    webpack和webpack-cli
    提示1:如果下载速度慢,请换成cnpm淘宝镜像。
    提示2:最好不要全局安装,除非你很自信。

    hello webpack

    首先呢,我们在项目根目录下新建两个文件夹,一个src用于存放我们的源码,一个dist用来存放打包后的代码。然后在dist文件夹中新建一个空的hello.html 文件,在里面引入这样的js脚本:(这里的hello.js名字是随便取的,不过要和执行打包命令的时候保持一致)

    <script src="hello.js"> </script>

    如图:
    webpack的html页面
    接着我们在src中新建一个hello.js文件,里面简单写一点东西:

    document.writeln(`
        <h1>hello webpack</h1>
    `)

    往页面上打印hello webpack,符合本文主旨,点名主题。
    至此,整个项目的结构是这样子的,很简单。
    项目结构
    准备工作完毕,接下来可以干正事了。
    慢着,我还要给你介绍一个命令:npx,简单了解一下,它是node v8.2+版本以后出来的,它可以临时安装可依赖程序,用完自动删,不用担心全局污染;他可以执行依赖包中的命令;他可以自动加载node_modules中的依赖包,不用指定路径等等等等….这里只是稍微提一下,具体好处有哪些,你可以自己百度。
    这里我们可以用npx在根目录下来执行我们的webpack命令,

    npx webpack ./src/hello.js -o ./dist/hello.js

    这段话表示,webpack会使用src目录中的hello.js为入口来打包,把打包后的js文件输出到dist目录中并且也命名为hello.js。这里的打包后的名称,要与之前在hello.html中引入的script脚本的名称要一致。命令运行完以后会在dist目录下多出一个hello.js文件。如图:
    webpack打包hello.js
    打包后的文件,是经过webpack压缩优化处理的,不用管它。我们可以在里面看到我们源代码中写的hello.js中的代码:
    打包后的hello.js
    这时候运行hello.html你可以发现,hello.js中的代码正常运行:
    运行结果
    如果你不想用npx,也可以直接使用node_modules中webpack命令:

     ./node_modules/.bin/webpack src/hello.js -o dist/hello.js

    window上如果要使用路径的方式调用webpack命令的话,需要反斜线:

    .
    ode_modules.binwebpack src/hello.js -o dist/hello.js

    效果应该是一样的。如果不一样,你就错了。
    至此,webpack的初体验就结束了。这个例子没有体现出webpack作为一个模块打包机的功能,所以,你自己练习的时候,可以在hello.js中import其他的模块,比如jquery,lodash或者自己定义的js等,然后在代码中使用这些模块的一些功能或者变量,看看webpack是不是也能打包,打包后的js是不是可以运行。这里我就不再举例子了,不然上面的都要重写了。

    使用配置文件

    快结束了,再忍忍。
    相比你敲了上面的命令后会有这样的想法,在命令行输入参数多不方便,我万一输错了改的话也十分麻烦,而且实际项目中的配置可能很多,如果都要在命令行输,那我不干了。
    ok,webpack提供了配置功能的,而且可以结合npm脚本更加方便的使用。
    首先我们在项目根目录下新建一个配置文件webpack.config.js,输入以下内容:

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

    我相信你能猜出来什么用了,就不多废话了。至于path是什么,path.resolve是干什么的,你可以去查阅node的基本用法。简单说一下,path是node中的一个模块,path.resolve是把相对路径转化成绝对路径的,__dirname 表示当前执行脚本所在的目录(你可以自己打印出来看看)
    接下来,你要删除掉dist中原来打包好的hello.js文件,然后在根目录下输入如下命令进行打包:

    npx webpack --config webpack.config.js

    效果应该是一模一样的,运行结果也是没变。
    提示:webpack.config.js 是默认的webpack配置文件名,即如果你上面的命令只输入npx webpack 也是ok的。这里加config参数只是说明,webpack可以支持任何名称的配置文件,十分灵活。
    webpack 配置文件

    添加npm script

    在package.json中添加一个运行脚本:

    "build": "webpack"

    为什么只写webpack不用再说了吧。
    这时候,在命令行运行 npm run build 即可达到一样的效果了。使用npm的scripts,就跟使用npx一样,可以通过模块名引用本地安装的 npm 包,非常方便。
    最后看一下是不是对的吧。
    使用npm run build打包
    Ok

    代码已上传至github,如果本文对你有帮助,请在github上给个star,谢谢。
    github传送门:https://github.com/JerryYuanJ/webpack-learn

  • 相关阅读:
    跨平台编译ceres for Android
    解决OpenCV JavaCameraView相机preview方向问题
    OpenCV 4.0.1 找不到R.styleable解决
    mumu模拟器安装xposed--如何在android模拟器上进行root
    Windows编译OpenCV4Android解决undefined reference to std错误
    Skeleton with Assimp 骨骼动画解析
    Android GL deadlock timeout error
    Android device debug (adb) by Charge Only mode
    Firefox 多行标签的解决方案分享
    Linux 工程向 Windows 平台迁移的一些小小 tips
  • 原文地址:https://www.cnblogs.com/jerryyj/p/9621547.html
Copyright © 2020-2023  润新知