zoukankan      html  css  js  c++  java
  • 创建基本webpack4.x项目以及在项目中使用React

    软件:visual studio code或者 webstorm2019.1.1

    一、创建基本的webpack4.x项目

    1、创建项目文件夹 webpack ,并用webstorm打开

    2、打开终端Terminal,快速初始化一个项目:

    1 npm init -y

      根目录下产生package.json文件。该文件定义了项目所需要的各个模块,以及项目的配置信息(比如名称、版本、许可证等元数据);该文件可以手工编写,也可以使用上述命令自动生成;npm install 命令会根据这个配置文件,自动下载所需要的模块,也就是配置项目所需要的运行和开发环境。package.json文件中添加中文注释会编译出错。

    3、在项目根目录下安装 webpack 和 webpack-cli (两者需要同时安装),根目录下会产生一个node_modules文件夹。

    1 cnpm i webpack webpack-cli -D

    注意:使用 cnpm 命令前,需要先安装 cnpm。

    npm i cnpm -g    //全局安装global

    4、在项目根目录下创建 src 目录,在该目录下新建 index.html 和 index.js 文件。(html文件,输入!,再按Tab键会自动填充模板)

    5、在项目根目录下创建 webpack.config.js 配置文件

    module.exports = {
        mode: 'development', //mode模块有两种模式:developmentproduction,两种模式下main.js的大小不同,前大后小,进行了代码压缩
    }

    6、最后,在终端执行 webpack 进行打包,生成 dist/main.js 目录文件,将 main.js 引入 index.html 中即可。(复制HTML文件路径,在浏览器中打开)

    1 <body>
    2   <div>hehehe</div>
    3   <script src="../dist/main.js"></script>
    4 </body>

    二、项目实时刷新

    a、webpack-dev-server配置

    cnpm install webpack-dev-server -g //全局安装
    cnpm install webpack-dev-server -D //项目局部安装

    b、在package.json 文件中的 "scripts" 中加入 “dev”

    "scripts": {
        "test": "echo "Error: no test specified" && exit 1",
        "dev" : "webpack-dev-server --open chrome --port3000" //自动打开浏览器Chrome,端口号3000
      },

     c、运行,结果如下图页面。

    npm run dev

    注意:1)若出现 cannot find module '名' ,可以执行 cnpm install -g 名 和 cnpm install -D 名 ;2)考虑node版本问题

             

        2)浏览器没有刷新是因为 webpack-dev-server 构建的 main.js ,其实是在 http://localhost:3000/main.js的位置,被托管到内存中,所以直接在index.html文件中引入:

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

    3)将index.html也放到内存中,减少磁盘的损耗,命令如下:

    cnpm i html-webpack-plugin -D

    在 webpack.config.js 中引入并配置导出:

    const path = require('path');
    const HtmlWebPackPlugin = require('html-webpack-plugin');//导入在内容中自动生成index页面的插件
    
    //创建一个插件的实例对象
    const htmlPlugin = new HtmlWebPackPlugin({
        template: path.join(__dirname, './src/index.html'),//源文件
        filename: 'index.html' //生成内存中的首页名称
    });
    
    module.exports = {
        mode: 'development', //mode模块有两种模式:developmentproduction,两种模式下main.js的大小不同,前大后小,进行了代码压缩
        plugins: [
            htmlPlugin
        ]
    }

    该操作直接将 index.html 放到了内存中,并自动引入了自动打包生成的 main.js 文件。重新运行npm run dev,结果如下:(其中荧光部分自动生成)

      

    注意:每次修改 webpack.config.js 文件都需要重新运行 npm run dev;快捷键ctrl+C:终止编译。

    三、在项目中使用React

     1、在项目目录下安装包:

    cnpm i react react-dom -S
    • react:专门用于创建组件和虚拟DOM,同时组件的生命周期都在这个包中;
    • react-dom:专门进行DOM操作,最主要的应用场景就是ReactDOM.render()。

    1.1-----index.js文件

     1 //a、导入包:注意成员名称大小写;规定!!!
     2 import React from 'react'
     3 import ReactDOM from 'react-dom'
     4 
     5 //b、用React创建虚拟DOM元素(包含3个参数)
     6 //第一个参数:创建元素类型;字符串形式,表示元素名称(标签名)。
     7 //第二个参数:是一个对象或者null;表示当前该DOM元素的属性。
     8 //第三个参数:子节点(包括其他的虚拟DOM、文本子节点等)。。。参数n为其他子节点。
     9 const myh1 = React.createElement('h1',{id:'myh1',title:'this is a h1'},'这是h1的文本内容');
    10 
    11 //c、用ReactDOM把虚拟DOM渲染到页面上(2个类型参数)
    12 //参数1:纯js或jsx创建的虚拟DOM对象;
    13 //参数2:指定页面上(index.html)的一个容器,用来包含虚拟DOM元素的真实DOM元素对象(一般是一个div)。
    14 ReactDOM.render(myh1,document.getElementById("app"))

    1.2-----index.html文件

     1 <!doctype html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport"
     6           content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
     7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8     <title>Document</title>
     9 </head>
    10 <body>
    11 <!--在index.html中,创建一个容器,渲染虚拟DOM元素,会放到容器内显示-->
    12 <div id="app"></div>
    13 
    14 <script src="/main.js"></script>
    15 </body>
    16 </html>

    2、创建虚拟DOM的方式有两种,上面的index.js文件中的第一种创建方式一般不用;

    创建虚拟DOM的第二种方法:JSX

    2.1-----什么是虚拟DOM?

      a)DOM的本质:浏览器的概念,用JS对象来表示页面上的元素,并提供了操作DOM对象的API;

      b)React中的虚拟DOM:框架中的概念,是程序员用JS对象来来模拟页面上的DOM元素和DOM嵌套;

      c)虚拟DOM的目的:为实现页面中DOM元素的高效更新。

    2.2-----JSX

      a)在JS文件中,默认不能写这种类似于html的文件,否则会打包失败;但可以用 babel 来转换这些JS中的标签;

      b)在JS文件中,混合写入类似于HTML的语法,叫做JSX语法,是符合XML规范的JS;

      c)JSX语法的本质:是在运行的时候,被转换成React.createElement形式再渲染,不是直接把jsx语句渲染到页面上。

    2.3-----如何启用JSX语法

      1、安装 babel 插件

    cnpm i @babel/core babel-loader @babel/plugin-transform-runtime -D
    cnpm i @babel/preset-env @babel/preset-stage-0 -D

      2、安装能够识别转换JSX语法的包(将JS转换成React.createElement)

    cnpm i @babel/preset-react -D

      3、安装完上面1,2插件,在 webpack.config.js中进行配置,增加module块。

    const path = require('path');
    const HtmlWebPackPlugin = require('html-webpack-plugin');//导入在内容中自动生成index页面的插件
    
    //创建一个插件的实例对象
    const htmlPlugin = new HtmlWebPackPlugin({
        template: path.join(__dirname, './src/index.html'),//源文件
        filename: 'index.html' //生成内存中的首页名称
    });
    
    module.exports = {
        mode: 'development', //mode模块有两种模式:developmentproduction,两种模式下main.js的大小不同,前大后小,进行了代码压缩
        plugins: [
            htmlPlugin
        ],
        module:{  //所有第三方模块的配置规则
            rules: [  //第三方匹配规则
                {test: /.js|jsx$/, use:'babel-loader', exclude: /node_modules/},
                //使用use必须添加exclude排除项,否则跑不起来
            ]
        }
    
    }

      4、在项目根目录下创建 .babelrc配置文件(不能单引号,不能注释)

    {
      "presets": ["@babel/preset-env","@babel/preset-react"],
      "plugins": ["@babel/plugin-transform-runtime"]
    }

    2.4-----在JSX中书写JS代码注意

    • 在JSX语法中,要把JS代码写到{ }中
    • 在JSX语法中,标签必须成对出现;如果是单标签,必须自闭和;
    • 当编译引擎在编译JSX代码时,如果遇到<>,就当做HTML代码去编译;如果遇到了{ }就把花括号内部代码当做普通JS去处理。
  • 相关阅读:
    发现一个github上特别优秀的面试准备资料
    坠吼的大哥的博客
    [BJDCTF 2nd]假猪套天下第一
    [网鼎杯 2020 朱雀组]phpweb
    [GWCTF 2019]我有一个数据库
    [BJDCTF2020]ZJCTF,不过如此
    [GXYCTF2019]禁止套娃
    洛谷
    [ZJCTF 2019]NiZhuanSiWei
    蓝帽杯决赛-爆炒腰花-WP
  • 原文地址:https://www.cnblogs.com/minyDong/p/10862644.html
Copyright © 2011-2022 走看看