• Webpack安装及基础配置


     NPM常用指令

    npm安装模块基本命令

    复制代码
    npm install moduleName # 安装模块到项目目录下
    
    npm install moduleName -g #-g 的意思是将模块安装到全局
    
    npm install moduleName --save #--save 的意思是将模块安装到项目目录下,并在package.json文件的dependencies节点写入依赖。
    
    npm install moduleName --save-dev #--save-dev 的意思是将模块安装到项目目录下,并在package.json文件的devDependencies节点写入依赖。
    复制代码

    其中:

    • -g 、-save 、–save-dev 可以写在moduleName前面
    • moduleName 可以是多个,空格隔开
    • --save 可以简写为 -S
    • --save-dev 可以简写为 -D
    • install 可以简写为 i

    安装指定版本webpack

    npm i webpack@3.6.0 -g  

     webpack和webpack-dev-server版本对应问题

    webpack 3.x 要使用 webpack-dev-server 2.x
    
    webpack 4.x 要使用 webpack-dev-server 3.x

     npm自动安装package.json中的依赖

    手动删除项目目录中的node_modules文件夹,执行如下命令,自动安装

    npm i

     通过Babel,将高级语法转换为低级语法

    安装命令如下:

    npm i babel-core babel-loader babel-plugin-transform-runtime -D
    npm i babel-preset-env babel-preset-stage-0 -D

    配置规则

    {test: /.js$/, use: 'label-loader', exclude: /node_modules/}

     

     

    第一步,安装Node.js

    Node.js安装详细步骤教程(Windows版) 

    什么是Node.js?

    简单的说 Node.js 就是运行在服务端的 JavaScript。

    Node.js是一个基于 Chrome V8 引擎的 JavaScript 运行环境;

    Node.js使用一个事件驱动、非阻塞式 I/O 的模型,使其轻量且高效;

    Node.js的软件包生态系统npm是全球最大的开源库生态系统。

    安装教程

    本机环境:Windows 7 旗舰版 64bit操作系统

    1.下载安装包

    Node.js 官方网站下载:https://nodejs.org/en/download/

    下载完成,安装包如下:

    2.安装

    双击打开安装,下一步下一步即可(笔者安装路径为“D:Program Files odejs”):

     

    ……

     安装成功,测试安装是否成功,运行CMD,分别输入node -v 和 npm -v 分别查看node和npm的版本号,如下图所示:

     安装完成后系统目录如图所示(其中,npm随安装程序自动安装,作用就是对Node.js依赖的包进行管理):

    3.配置npm在安装全局模块时的路径和缓存cache的路径

    因为在执行例如npm install webpack -g等命令全局安装的时候,默认会将模块安装在C:Users用户名AppDataRoaming路径下的npm和npm_cache中,不方便管理且占用C盘空间,

    所以这里配置自定义的全局模块安装目录,在node.js安装目录下新建两个文件夹 node_global和node_cache,如图所示:

    然后在cmd命令下执行如下两个命令:

    npm config set prefix "D:Program Files
    odejs
    ode_global"
    
    npm config set cache "D:Program Files
    odejs
    ode_cache"

    执行命令,如下图所示:

    执行完后,配置环境变量,如下:

    • “环境变量” -> “系统变量”:新建一个变量名为 “NODE_PATH”, 值为“D:Program Files odejsnode_global ode_modules”,如下图:

    • “环境变量” -> “用户变量”:编辑用户变量里的Path,将相应npm的路径(“C:Users用户名AppDataRoaming pm”)改为:“D:Program Files odejs ode_global”,如下:

    配置完成。 

    4.测试

     在cmd命令下执行 npm install webpack -g 安装webpack如下图所示:

    安装成功,自定义文件夹如下所示:

     

     在cmd命令下执行 webpack -v 查看webpack版本,如下图所示:

     

    第2步, Webpack安装配置及打包详细过程

    Webpack简单介绍

    本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle

    其中包含四个核心概念

    • 入口(entry):指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的
    • 输出(output):告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist
    • loader:让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)
    • 插件(plugins):插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务。

    通过官网的一张图,可以说明webpack的强大,如下所示:

    打包步骤

    接下来详细介绍webpack安装配置及打包的详细过程

    安装node.js

    第一步已完成。

     全局安装webpack

    运行CMD,安装命令如下所示,其中, -g是全局安装,并移除安装了 webpack和webpack-cli

    npm install webpack webpack-cli –g

    创建本地项目文件夹

    创建项目本地文件夹,如“D:TestWebpack”,在CMD命令窗中分别输入如下命令,切换到该目录

    D:                 //切换到D盘
    cd D:TestWebpack //切换到项目目录

    本地安装webpack

    -S:--save的简写,等同于npm run start 只需输入npm start,这两个效果是一样的。
    -D:--save-dev的简写,其包名称及版本号会存在package.json的devDependencies这个里面,而--save则会将包名称及版本号放在dependencies里面。

    延伸:dependencies是运行时依赖,devDependencies是开发时的依赖

    输入如下命令,在项目目录中安装webpack,其中,--save-dev是本地安装

    npm install webpack webpack-cli --save-dev

    上面的命令也可以简化成

    npm install webpack webpack-cli -D

    查看webpack 版本

    输入如下命令,若出现版本号,说明安装成功。

    webpack -v

    创建package.json文件

    输入如下命令,将在项目目录中自动生成package.json文件

    npm init -y

    配置打包目录

    在项目目录下,新建config文件夹,用于存放配置文件;src文件夹,用于存放源码;out文件夹,用于存放打包生成文件,具体如下图所示。

     添加webpack.config.js文件

    在config文件夹中添加webpack.config.js文件,并添加如下代码:

    复制代码
    const path=require('path'); //调用node.js中的路径
    module.exports={
        entry:{
            index:'./src/js/index.js' //需要打包的文件
        },
        output:{
            filename:'[name].js',    //输入的文件名是什么,生成的文件名也是什么
            path:path.resolve(__dirname,'../out') //指定生成的文件目录
        },
        mode:"development"    //开发模式,没有对js等文件压缩,默认生成的是压缩文件,还有另外 一种模式 production  发布模式
    }
    复制代码

    运行webpack

    在cmd命令窗体中,输入如下命令,运行成功后,在out目录中会生成打包后的index.js

    webpack --config config/webpack.config.js

     配置package.json

    每次输入命令webpack --config config/webpack.config.js,太长,且非常不方便,此时我们可以在package.json文件中配置,如下所示:

    复制代码
    {
      "name": "TestWebpack",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo "Error: no test specified" && exit 1",
        "dev": "webpack --config config/webpack.config.js"  //如果webpack.config.js 在项目跟目录 直接输入 "dev":"webpack" 即可
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "clean-webpack-plugin": "^3.0.0",
        "webpack": "^4.39.3",
        "webpack-cli": "^3.3.8"
      }
    }
    复制代码

    配置完成后,我们输入的如下命令,可以直接打包。

    npm run dev

    JS缓存问题的处理

    通过哈希值解决JS缓存问题(在没有修改JS要打包的内容时,不会重新打包一个JS文件),修改webpack.config.js文件,具体代码如下:

    复制代码
    const path=require('path');
    module.exports={
        entry:{
            index:'./src/js/index.js'
        },
        output:{
            filename:'[name].[chunkhash:8].js',//增加8位的哈希值
            path:path.resolve(__dirname,'../out')
        },
        mode:"development",
    }
    复制代码

    安装webpack插件clean-webpack-plugin

    通过clean-webpack-plugin插件删除输出目中之前旧的文件。

    安装命令
    npm install --save-dev clean-webpack-plugin
    用法一
    复制代码
    const path=require('path');
    const {CleanWebpackPlugin} = require('clean-webpack-plugin');
    module.exports={
        entry:{
            index:'./src/js/index.js'
        },
        output:{
            filename:'[name].[chunkhash:8].js',
            path:path.resolve(__dirname,'../out')
        },
        mode:"development",
        plugins:[
            new CleanWebpackPlugin()        
        ]
    }
    复制代码
    用法二
    复制代码
    const path=require('path');
    const CleanWebpackPlugin = require('clean-webpack-plugin').CleanWebpackPlugin ;
    module.exports={
        entry:{
            index:'./src/js/index.js'
        },
        output:{
            filename:'[name].[chunkhash:8].js',
            path:path.resolve(__dirname,'../out')
        },
        mode:"development",
        plugins:[
            new CleanWebpackPlugin()        
        ]
    }
    复制代码

     配置完后,我们再次运行npm run start,此时out目录中,只有一个新生成的js文件,如下图所示。

    如何配置自动打包?

     安装自动打包的功能包 webpack-dev-server

            npm install webpack-dev-server -D

    修改package.json中的dev指令

    "dev": "webpack-dev-server --config config/webpack.config.js"  //如果webpack.config.js 在项目跟目录 直接输入 "dev":"webpack-dev-server" 即可

    由于webpack-dev-server 会将js输出到内存中,需要将html页面中的script引用地址调整为根目录下的路径地址

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

    调整好后执行命令 npm run dev  查看效果

    如何配置打包完成后打开默认页面?

    安装默认预览的包 html-webpack-plugin

    npm install html-webpack-plugin -D

    修改 webpack.config.js文件

            //导入包
            const HtmlWebpackPlugin = require("html-webpack-plugin");
            //创建对象
            const htmlPlugin = new HtmlWebpackPlugin({
                //设置生成预览页面的模板文件
                template:"./src/index.html",
                //设置生成的预览页面名称
                filename:"index.html"
            })

    继续修改webpack.config.js文件,添加plugin信息

            module.exports = {
                ......
                plugins:[ htmlPlugin ]
            }

    更改package.json文件,修改dev命令 如果webpack.config.js在根目录则不需要手动指定

    "dev": "webpack-dev-server --open --host 127.0.0.1 --port 8888"

    或 指定config目录

    webpack-dev-server --config config/webpack.config.js --open --host 127.0.0.1 --port 8888

    如何打包css文件,less文件,sass文件?

     安装style-loader,css-loader来处理样式文件 

    npm install style-loader css-loader -D

    安装less,less-loader处理less文件

    npm install less-loader less -D

    安装sass-loader,node-sass处理sass文件

    npm install sass-loader node-sass -D

    配置webpack.config.js的module中的rules数组

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

    如何打包处理自动添加css的兼容性前缀?(-ie-,-webkit-)

    安装postcss-loader加载器以及autoprefixer

     npm install postcss-loader autoprefixer -D

    创建并配置postcss.config.js文件

    const autoprefixer = require("autoprefixer");
    module.exports = {
        plugins:[ autoprefixer ]
    }

    配置更改webpack.config.js的module中的rules数组

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

    如何打包样式表中的图片以及字体文件?

    安装对应url-loader和file-loader的加载器

    npm install url-loader file-loader -D


    配置webpack.config.js的module中的rules数组  其中limit用来设置字节数,只有小于limit值的图片,才会转换为base64图片

    module.exports = {
            ......
            module : {
                rules:[
                            .......
        {  test:/.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
                               use:"url-loader?limit=16940"  }
                ]
            }
        }

    如何打包处理js文件中的高级语法?

    在编写js的时候,有时候我们会使用高版本的js语法,有可能这些高版本的语法不被兼容,我们需要将之打包为兼容性的js代码
    我们需要安装babel系列的包

    A.安装babel转换器

    npm install babel-loader @babel/core @babel/runtime -D

    B.安装babel语法插件包

     npm install @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D


    在项目根目录创建并配置babel.config.js文件

    module.exports = {
            presets:["@babel/preset-env"],
            plugins:[ "@babel/plugin-transform-runtime", "@babel/plugin-proposal-class-properties" ]
        }

    配置webpack.config.js的module中的rules数组     //exclude为排除项,意思是不要处理node_modules中的js文件

    rules:[
                            .......
        {  test:/.js$/,  use:"babel-loader",  exclude:/node_modules/  }
    ]

    如何配置.vue文件的加载器?

    安装vue组件的加载器

        npm install vue-loader vue-template-compiler -D

    配置webpack.config.js的module中的rules数组

        const VueLoaderPlugin = require("vue-loader/lib/plugin");
        const vuePlugin = new VueLoaderPlugin();
        module.exports = {
            plugins:[ htmlPlugin, vuePlugin  ],
            module : {
                rules:[
                    .......                { 
                        test:/.vue$/,
                        loader:"vue-loader",
                        
                    }
                ]
            }
        }

    如何在一个项目中引入并使用单文件组件?
    安装vue

    npm install vue -S

    在index.js中引入vue和单文件组件

    import Vue from "vue"
    import app from "./components/App.vue";

    创建Vue实例对象并指定el,最后使用render函数渲染单文件组件

    const vm = new Vue({
    el:"#first",
    render:h=>h(app)
    })

    使用webpack打包发布项目
    在项目上线之前,我们需要将整个项目打包并发布。
    配置package.json

    "scripts":{
    "dev":"webpack-dev-server",
    "build":"webpack -p"
    }


    在项目打包之前,可以将dist目录删除,生成全新的dist目录

    文章内容转载,引用链接:

    https://www.cnblogs.com/aizai846/p/11837227.html

    https://www.cnblogs.com/aizai846/p/11441693.html

    https://www.cnblogs.com/aizai846/p/11497508.html

  • 相关阅读:
    【从0开始学架构】架构设计三原则
    【Linux网络】端口
    【Python连接数据库】Python连接Teradata数据库-TD SQL Driver 方式(teradatasql包)
    【Python实战】python中含有中文字符无法运行
    【Linux基础】linux updatedb命令
    【Linux基础】查看和更改当前系统字符集(LC_ALL、LC_TYPE和LANG)
    【数据库】ODBC与JDBC
    LNMP安装目录及配置文件位置
    Linux Vi 的使用
    C#VS2017添加ReportViewer控件
  • 原文地址:https://www.cnblogs.com/riddly/p/13444117.html
Copyright © 2020-2023  润新知