【webpack】入门德姆o 分分快三计划

作者:分分快三计划

创建library

  • 一体化代码
  • 基本代码为
    output: {
        path: DIST_PATH,
        publicPath: "",
        chunkFilename: "[name].js",
        filename: "testPlugin.js",
        libraryTarget: 'umd',//将你的 library 暴露为所有的模块定义下都可运行的方式
        library: 'testPlugin'
    },
  • 卷入出来后我们会拿走一个testPlugin.js,那正是咱们友好的三方库。

    阳台项目中利用

  • 品种中设置externals,指标是使自身项目不会另行打包引进的库

    externals: {
        testPlugin:"testPlugin",
    },
  • 类型引进
<!--index.html-->
<script src="testPlugin.js"></script>

//index.js
import testPlugin from 'testPlugin';
console.log(testPlugin);
  • 项目打包好
  • 将testPlugin库丢入打包好的dist中
  • 会开掘平台项目曾经打响引进库
  • 如此那般会发觉只有打包好dist再丢入库才方可看来作用,通常开支境况下怎么办吧,能够应用copy-webpack-plugin,及将静态的文本夹自动拷贝到dist
const copyWebpackPlugin = require('copy-webpack-plugin');

    plugins: [
        new copyWebpackPlugin([{
            from:__dirname '/src/static',//打包的静态资源目录地址
            to:'./static' //打包到dist下面的static
        }]),
    ...
    ]
  • 下一场只需求修改index.html的引进地址
<script src="static/plugin/testPlugin/testPlugin.js"></script>

条件准备

本节实例工程的运营条件和技艺栈相关清单如下:

运维条件:JDK 8

编制程序语言:Java、Kotlin

Web 开拓框架:Spring MVC,Spring Boot

ORM框架:Spring Data JPA

数据库:MySQL,客商端工具 mysql workbench

视图模板引擎:Freemarker

开发 IDE: IDEA

布局消息

发布npm包

地点的办法的亮点是:假使兄弟单位的三方库变了,只须求他们把打包好的库文件给大家,我们丢进去替换掉从前的就能够了,我们温馨并不供给重新打包。

那发表npm包呢?自个儿没事又找出了一波,并打响宣布了三个足以对文件插入表情的react小插件。
------传送门------

简轻易单前端表单校验

平时,我们会在前面八个页面前遭逢客商输入做一些理所必然校验。比方,我们增添对客商名长度>3的校验。首先,监听客户的表单输入函数是 onChange, 客户名表单的 JSX代码如下:

<FormControl className={classes.formControl}> <InputLabel>用户名</InputLabel> <Input onChange={this.handleUsernameChange} autoFocus={true}/> <FormHelperText >{this.state.helperText}</FormHelperText></FormControl>

采用 FormHelperText 组件来唤醒顾客输入的校验结果。展现的 helperText 存款和储蓄在 state 中。

个中,handleUsernameChange函数的代码如下:

handleUsernameChange { console.log(event.currentTarget); if (event.currentTarget.value.length < 3) { this.setState({ // 更新 helperText 提示文本 helperText: '用户名长度不得小于3' }) } else { this.setState({ helperText: '' }) }};

为了能够在JSX代码中,能够平素利用onChange={this.handleUsernameChange}那样的语法:

<Input onChange={this.handleUsernameChange} autoFocus={true}/>

并且能够在handleUsernameChange()函数中应用 this.setState , 大家须要在构造函数提前绑定 this:

constructor { super; this.state = { helperText: '' }; // 这边绑定是必要的,这样 `this` (代表 LoginForm) 才能在回调函数中使用,例如:this.setState this.handleClick = this.handleClick.bind; this.handleUsernameChange = this.handleUsernameChange.bind;}

这么,大家在输入客户名的经过中,会看到实时提示:

分分快三计划 1image

{
test: /.js$/, 
loader: 'babel-loader', 
include: path.resolve(__dirname, 'src'),
exclude: /node_modules/,

透露计划

  • 友善的品类
  • 去npm官方网站,注册账号。
  • 给自个儿的npm包想个名字,并透过查找验证是不是未有被占有

    ### 改写项目webpack配置

  • 着力,同地点的开创library同样

  • 生儿育女条件布署webpack.config.prod.js
//webpack.config.prod.js  
    entry: {
        component: ['./src/component/Expression/Expression.js']
    },
    output: {
        path: DIST_PATH,
        filename: '[name].js',
        publicPath: "/dist/",
        libraryTarget: 'umd',
        library: 'expression'
    },
    externals: {
        'react': 'react',//因为引入的肯定是react项目,所以不需要再将react打包进npm包
        'react-dom': 'react-dom'
    },
  • 开拓条件安排webpack.config.dev.js
//webpack.config.dev.js
    entry: {
        app: ['./src/index.js'],
        component: ['./src/component/Expression/Expression.js']
    },
  • 这么设置之后打包出来只有叁个component.js,所以须要修改package的main
  • 修改package.json
  "main": "dist/component.js",
  • package的其余设置

    • 另外package里面包车型大巴name正是您包的名字
    • version是本子号
    • main是进口文件
    • description是描述
    • repository是线上git地址
    • keywords是关键字,相比关键,外人能够经过这一个寻觅到你的包
    • author是作者

      ### 做完这几个就能够颁发了

  • npm login

    • 会令你输入账号,密码,邮箱,然后就登入了
  • 签到成功会见世以下提醒新闻:Logged in as simbawu on https://registry.npmjs.org/.
    • 留心:假设不是那个,而是大家的另外镜像举例天猫的,要求先切换回来,否则提交不起npm config set registry https://registry.npmjs.org/,然后再一次npm login。
  • npm publish发布
    • 若出现包名和本子号则表露成功
      分分快三计划 2
表单提交函数编写

此地我们使用深谙的 jquery的 ajax 来展开登入表单的交由。首先,安装 jquery重视如下:

$ npm install jquery --save

设置收尾,大家能够在 package.json 中多了 "jquery": "^3.3.1" 。

上边,大家来使用 ajax 写登入 Post 央浼。

初叶化项目

友善发表的react小插件

------传送门------

布署数据库源

首先在数据库中,成立 schema :

CREATE SCHEMA `simple_login` DEFAULT CHARACTER SET utf8 ;

然后,在 application.properties 中配置 datasource 如下:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/simple_login?autoReconnect=true&useUnicode=true&createDatabaseIfNotExist=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTCspring.datasource.username=rootspring.datasource.password=root1234

再次启航 main 程序,大家得以看来运行成功了:

...o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port: 8080  with context path ''c.e.s.s.SimpleLoginBackEndApplicationKt : Started SimpleLoginBackEndApplicationKt in 8.981 seconds (JVM running for 10.534)

其不时候,大家访问 ,拜会到八个暗中认可错误页面

分分快三计划 3image

因为,此时大家的代码中还不曾对诉求管理的 Controller。

npm i webpack -D
webpack.config.js

近来铺面有个须求,大家单位开荒二个平台项目事后,别的兄弟单位付出出的插件大家得以拿来直接用,况兼无需大家再拓宽打包,只是做静态的文件引入,斟酌一波后意识,webpack成立library能够达成。

使用 Card 布局
import Card from '@material-ui/core/Card';import CardContent from '@material-ui/core/CardContent';

Webpack 是随即最吃香的前端资源模块化管理和包裹工具。它能够将非常多麻痹的模块根据倚重和法则打包成符合生产条件布置的前端财富。还能将按需加载的模块举行代码分隔,等到实际要求的时候再异步加载。通过 loader 的调换,任何情势的能源都足以视作模块,比方 CommonJs 模块、 速龙模块、 ES6 模块、CSS、图片、 JSON、Coffeescript、 LESS 等。
webpack在支付中得以选拔 JavaScript 管理你的重视关系和加载顺序,制止不测引进一些你无需在生产中用上的 CSS 样式表和 JS 库,使项目膨胀,或再一次载入有个别js,css等库。

最后

世家好,这里是「 TaoLand 」,这些博客首要用来记录一个新手程序员的Growth之路。那也是友善首先次做博客,希望和我们多多调换,一齐中年人!小说将会在下列地方同步更新……
村办博客:www.yangyuetao.cn
小程序:TaoLand

测试 POST 接口

为了方便地开展测量检验,大家抬高Spring Boot Actuator信赖到工程中:

dependencies { ... implementation('org.springframework.boot:spring-boot-starter-actuator') ...}

重复开动应用,大家将会在尾部工具栏中看看端点诉求映射:

分分快三计划 4image

单击 /login.json [POST], 选取 Open in HTTP Request Editor, 在 POST 后边加上参数

POST http://127.0.0.1:9000/login.json?username=123&password=123

正如图, 点击金红施行按键

分分快三计划 5image

能够收获输出:

POST http://127.0.0.1:9000/login.json?username=123&password=123HTTP/1.1 200 Content-Type: application/json;charset=UTF-8Transfer-Encoding: chunkedDate: Sat, 10 Nov 2018 16:19:10 GMT{ "data": "username=123,password=123", "success": true, "msg": ""}Response code: 200; Time: 23ms; Content length: 60 bytes

好了,以后大家的前端表单页面有了,后端的 /login.json 接口也好了。怎么样集成呢?且看下文分解。

本节大家来把上边的前端 js、html页面集成到后端的 Spring Boot应用中来。

大家后端视图引擎使用的是 Freemarker。私下认可的视图像和文字件在 src/main/resources/templates 目录下。

咱俩先手动把前端工程中的index.html、 bundle.js 分别放置 src/main/resources 相应的目录上边,如下图

分分快三计划 6image

/***/ }),

编写供给转载路由

编写一个调控器,把来自前端的呼吁 "", "/", "/index.html", "/index.htm" 路由到后端的视图index.html上。代码如下:

package com.easy.springboot.simpleloginbackend.controllerimport org.springframework.stereotype.Controllerimport org.springframework.web.bind.annotation.GetMapping@Controllerclass IndexController { @GetMapping(value = ["", "/", "/index.html", "/index.htm"]) fun index(): String { return "index" }}

重启应用,访问 , 大家拜望到登录表单页面。输入客商名、密码,点击登陆

分分快三计划 7image

着重浏览器的调节台,大家能够看出伏乞成功消息:

分分快三计划 8image

央求响应值:

{"data":"username=jack,password=123456","success":true,"msg":""}

有了上面包车型地铁内外端完整的费用流程作为基础,大家就能够接连数据库,判定客商名、密码是或不是存在;也足以在前端做出登陆成功、战败的跳转提醒等拍卖了。我们会在后头的章节中逐年介绍。

本章通过三个大约的顾客登入表单的前端 React开荒、后端 Spring Boot Kotlin开荒的全部实例,给大家解说了左右端分离开拓的简约进度。当然,在实际上的项目支付中,咱们有一体系的自动化脚手架、营造筑工程具插件等,我们会在其余章节中逐步介绍。

前面一个工程代码地址:

后端工程代码地址:

境内第一Kotlin 开垦者社区民众号,首要分享、沟通 Kotlin 编制程序语言、Spring Boot、Android、React.js/Node.js、函数式编制程序、编制程序观念等有关主旨。

分分快三计划 9开拓者社区 QRCode.jpg

  1. 样式 css-loader,style-loader
执行webpack命令

作者们利用 npm start 来实行webpack打包动作,我们看到在dist目录一下生成了三个bundle.js文件。然后,间接张开index.html 看到页面效果:

Hello World, Now Time is Sat Nov 10 2018 12:49:10 GMT 0800 
  • webpack -p – 进行优化压缩管理,也正是设置process.env.NODE_ENV="production"
  • webpack --watch – 持续监听创设
  • webpack -d – debug模式,包含source maps
  • webpack --display-error-details - 彰显详细的打包出错音讯
  • webpack -h 查看越多的新闻,常见的还恐怕有--colors,--progress
  • webpack --config XXX.js //使用另一份配置文件(举个例子webpack.config2.js)来打包
    加载越多财富 –使用loader
编写React组件 App.js

代码如下:

var React = require;export default class App extends React.Component { render() { // Every react component has a render method. let now = new Date(); let datetimeString =`${now.toDateString()} ${now.toTimeString()}`; return ( // Every render method returns jsx. Jsx looks like HTML, but it's actually javascript and functions a lot like xml, with self closing tags requiring the `/` within the tag in order to work propperly <h1> Hello World, Now Time is {datetimeString} </h1> ); }}

个中,var React = require 是引进 react 包。我们的App类传承自React.Component。各样 React Component 都不可能不要有一个 render() 函数,该函数重返三个 JSX 对象。

在render() 函数中,我们贯彻了一个简便的 App 组件:给世界问好,并出示当前的岁月。

那样大家得以一向运维

情况筹算

本节实例工程的运维景况和技能栈相关清单如下:

运维情况希图:Node

开辟工具 IDE:WebStorm

浏览器:Chrome

框架和零部件库:react, babel,jquery, material-ui

塑造筑工程具:webpack

大家用 webpack es6 来组成 react 开垦前端选取。本章中,我们手动使用npm来设置种种插件,来一以贯之自身搭建情形。当然,在实质上的连串开拓中,已经有大神们开垦好了脚手架,例如create-react-app( webpack es6 的 React前端开拓工程。

resolve: {
extensions: ['', '.js', '.vue']
}

package-lock.json的作用

大家有看到地点的目录中,多了八个package-lock.json文件。这么些文件是干嘛用的吗?其实用一句话来回顾极粗略,正是锁虞升卿装时的包的版本号,并且需求上传到git,以保证其余人在npm install时我们的信赖能保险同一。

听新闻说官方文书档案,那个package-lock.json 是在 npm install时候生成一份文件,用以记录当前状态下实际安装的种种npm package的现实性来源和版本号。它有怎样用吗?因为npm是一个用以管理package之间信赖关系的管理器,它同意开辟者在pacakge.json中间标出自身项目对npm各库包的依靠。你能够挑选以如下方式来声明自身所要求库包的版本。

此间比如:

"dependencies": { "@types/node": "^8.0.33",}

这些中的前行标号^是概念了向后非常信赖,指若是types/node的本子是超过8.0.33,并在大版本号上一致,就允许下载最新版本的 types/node库包,比如实际上大概运营npm install时候下载的有血有肉版本是8.0.35。

{
test: /.css$/,
loader: ‘style-loader!css-loader’
}
在编译的js代码中我们得以见见

选择表单 FormControl
import FormControl from '@material-ui/core/FormControl';import Input from '@material-ui/core/Input';import InputLabel from '@material-ui/core/InputLabel';

├── src
│ ├── main.js --主入口
│ ├── assets
│ │ ├── css
│ │ └── img
│ ├── libs
│ │ └── util.js --公共措施
│ ├── modules
│ │ ├── login.js --登入页面
│ │ └── product.js --商品页面
├── README.md
├── index.html
├── package.json
├── webpack.config.js
└── yarn.lock

客户登陆前后端分离开垦实战案例:React,npm,webpack,ES6, Kotlin, Spring Boot, Gradle, Freemarker, Material UI

进阶

本章通过三个粗略顾客登入模块全栈开拓案例,在此以前端 React工程的创立、开拓,到后端 Spring Boot Kotlin Gradle工程的创设,使用 Spring Data JPA 来操作 MySQL数据库, 使用Freemarker视图引擎,在此之前未来完全的授课整个开辟进度。

启二个劳务webpack-dev-server

视图像和文字件私下认可后缀

接下来,为了便于起见,我们把 Freemarker 的暗中认可文件后缀名改成 .html, 那么些布局在 application.properties中:

spring.freemarker.suffix=.html

"scripts": {
"start": "nodemon --exec webpack -w webpack.config.js",
"serve:watch": "nodemon --exec webpack-dev-server -w webpack.config.js"
}
页面实时刷新 Hot Module Replacement(HMXC90) 热加载

写一个 Rest 接口Hello World

上边我们就来写一个 Rest 接口。代码如下:

package com.easy.springboot.simpleloginbackend.controllerimport org.springframework.web.bind.annotation.GetMappingimport org.springframework.web.bind.annotation.RestController@RestControllerclass HelloWorldController { @GetMapping(value = ["/hello"]) fun hello(): String { return "Hello World!" }}

重启应用,再度访谈 , 页面输出:Hello World!

设若想改动服务端口,只要求在 application.properties 中增加如下配置:

server.port=9000

babel-loader安装相应的包

营造项目

打开 IDEA,点击 Open

分分快三计划 10image

分选刚刚自动生成的样板工程的根目录

分分快三计划 11image

点击“Open”,进入到 Import Project from Gradle界面:

分分快三计划 12image

如上海体育地方勾选,个中 Gradle 安装包的根目录是:/Users/jack/soft/gradle-5.0-rc-1(那个须要依靠本人的机械上的目录自身钦点)。点击“OK”,步向到IDEA项目主分界面,耐心等待项目创设达成,大家将看到如下的体系目录结构:

分分快三计划 13image

exports = module.exports = __webpack_require__(1)(undefined);
// imports

使用 Button 按钮
import Button from '@material-ui/core/Button';

npm i babel-loader -D
设置babel-core和babel-preset-es二零一五,将ES6的代码转变到ES5

编写index.js和index.html文件

笔者们在 index.js 中引进我们地方的 App组件,代码如下:

import App from "./components/App";var ReactDOM = require('react-dom');ReactDOM.render( <App/>, document.getElementById;

在那之中,成分 id = 'App' 是大家下边在index.html 中钦赐的 div 。

在 index.html中引用 webpack 打包生成的bundle.js, 代码如下:

<!DOCTYPE html><html><head> <meta charset="UTF-8"/> <title>Hello React!</title></head><body><div ></div><script src="dist/bundle.js"></script><!--引用webpack打包输出的bundle.js--></body></html>

entry的安顿大家得以是string,object,array类型,后面包车型客车事例用到的是string,单个入口,今后我们加多了多少个目录及文件

Spring Boot工程的入口类

大家能够看出,在 Spring Boot工程中,使用@SpringBootApplication申明注解main 程序。

package com.easy.springboot.simpleloginbackendimport org.springframework.boot.autoconfigure.SpringBootApplicationimport org.springframework.boot.runApplication@SpringBootApplicationclass SimpleLoginBackEndApplicationfun main(args: Array<String>) { runApplication<SimpleLoginBackEndApplication>}

以此时候,大家一贯运营这个main函数,大家将会在调控台看到如下的报错提醒:

***************************APPLICATION FAILED TO START***************************Description:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver classAction:Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath. If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

日志告诉我们,Spring Boot应用在运营进度中,自动先导化 DataSource 配置的时候退步。因为大家还不曾告知程序,大家的数据库连接的音讯。

context
The base directory (absolute path!) for resolving the entry option. If output.pathinfo is set, the included pathinfo is shortened to this directory.
进口文件的底蕴目录(相对路线!)。假若output.pathinfo设置,值为到该目录的门路。
愈来愈多webpack基础配置
context: path.resolve(__dirname, 'src'),
entry: {
main: './main.js',
login: './modules/login.js',
product: './modules/product.js'
}
假假使数组,那么会将数组中的模块合併,并且输出末了叁个;如若是object,那么多个输入的key会打包成包的chunk名称。

创建 Spring Boot工程

接下去,我们创造两个接纳 Kotlin编制程序语言,Gradle 来营造项指标 Spring Boot工程。浏览器访谈: 创制工程如下图所示:

分分快三计划 14image

挑选 Gradle Project,Kotlin编制程序语言,选取 Spring Boot 2.1.0 版本,然后在品种为主消息中,分别填入 Group、Artifact,起步依赖选拔:Web,MySQL,JPA,Freemarker。 点击“Generate Project”,下载自动生成的样板工程,解压,导入到 IDEA中。

能够平昔写util,而不用util.js, vue文件也足以简轻松单文件名

安装Webpack

1.创立项目文件夹

mkdir simple-login

新建 simple-login 文件夹,在此文件夹内展开webpack本地安装。

2.npm初始化

 $ npm init -yWrote to /Users/jack/spring-boot-book/chapter03/front-end/simple-login/package.json:{ "name": "simple-login", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "keywords": [], "author": "", "license": "ISC"}

初步化,目录下生成一个 package.json 文件,内容如上。

3.安装 webpack

WebPack是什么:

npm install --save-dev webpack 

安装成功后 simple-login 目录中会出现node_modules 目录 。

只顾:不引入应用全局安装npm install --global webpack

咱俩得以看来 .bin 目录上边包车型大巴webpack脚本:

分分快三计划 15image

展开脚本看到源码如下:

#!/usr/bin/env nodeprocess.exitCode = 0;/** * @param {string} command process to run * @param {string[]} args commandline arguments * @returns {Promise<void>} promise */const runCommand = (command, args) => { const cp = require("child_process"); return new Promise((resolve, reject) => { const executedCommand = cp.spawn(command, args, { stdio: "inherit", shell: true }); executedCommand.on("error", error => { reject; }); executedCommand.on("exit", code => { if (code === 0) { resolve(); } else { reject; });};...

因此脚本中的

#!/usr/bin/env node

大家就能够见道,那是贰个使用 node运转条件举办的多少个 js。此时,大家package.json 文件中在devDependencies 下边多了一行 webpack 包的依赖:

{ "name": "simple-login", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "webpack": "^4.25.1" }}

npm i nodemon -g
nodemon - -exec webpack -w webpack.config.js
那边大家只须求监听webpack.config.js文件的转移,所以增多-w参数钦点特定的目录只怕文件

登入开关事件管理

登入开关的前端代码如下:

<Button onClick={this.handleClick} variant="contained" color="primary" className={classes.button}> 登陆</Button>

里面,onClick 事件绑定当前LoginForm 类的handleClick 函数,代码如下:

handleClick { console.log(event.currentTarget); const username = document.getElementById('username').value const password = document.getElementById('password').value console.log({ username: username, password: password })};

那样我们得以在登录页面,输入客商名、密码:

分分快三计划 16image

点击“登入”,能够见到调控台的出口:

分分快三计划 17image

body {
background-color: #ff0;
}
main.js中引进css财富,会报错,因为从没相应的loader进行拍卖

使用npm搭建React的webpack环境

本节大家来介绍怎样通过 npm一步一步创造React前端工程。大家因而Webpack打包创设React工程。

我们任重先生而道远来设置react react-dom babel等npm包,设置webpack.config.js,打包输出bundle.js。

let img1 = document.createElement('img')
img1.src = require('./assets/img/icon.png')
document.body.appendChild(img1)
更多的loaders:

使用 prop-types

咱俩应用 prop-types 第三方库对组件的props中的变量举行项目检查实验。安装命令:

$ npm install prop-types

终极,登入页面包车型的士 js组件类的代码如下:

class LoginForm extends React.Component { render() { const {classes} = this.props; return ( <div className={classes.loginForm}> <Card className={classes.cardHeight}> <CardContent> <FormControl className={classes.formControl}> <InputLabel>用户名</InputLabel> <Input /> </FormControl> <FormControl className={classes.formControl}> <InputLabel>密码</InputLabel> <Input type='password'/> </FormControl> <div className={classes.inlineButton}> <Button variant="contained" color="primary" className={classes.button}> 登陆 </Button> <Button variant="contained" className={classes.button}> 重置 </Button> </div> </CardContent> </Card> </div> ) }}

output: {
path: path.join(__dirname, 'dist'),
publicPath: '/',
filename: '[name]-[hash:8].js',
chunkFilename: '[id]-[chunkhash].js'
}
跑webpack会看到dist下生成login-5ccbce5e.js,main-5ccbce5e.js,product-5ccbce5e.js三个文件

修改 maven 宗旨商旅地址

国外的 maven宗旨酒店本国访谈起来比异常慢,改用Ali云提供的大旨旅馆镜像。在build.gradle中增多Ali云货仓镜像的地方如下:

repositories { maven { url 'https://maven.aliyun.com/repository/central' } mavenCentral()}
module.exports = {
    entry: './src/main.js',
    output: {
        filename: './dist/bundle.js'
    }
}
引入 jquery

先是,大家在LoginForm.js文件底部 import jquery,代码如下:

import $ from 'jquery'

plugins: [
new webpack.HotModuleReplacementPlugin() //热加载插件
],

build.gradle 配置文件

我们得以看到在工程的依赖:

dependencies { implementation('org.springframework.boot:spring-boot-starter-data-jpa') implementation('org.springframework.boot:spring-boot-starter-freemarker') implementation('org.springframework.boot:spring-boot-starter-web') implementation('com.fasterxml.jackson.module:jackson-module-kotlin') implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation("org.jetbrains.kotlin:kotlin-reflect") runtimeOnly('mysql:mysql-connector-java') testImplementation('org.springframework.boot:spring-boot-starter-test')}

"scripts": {
"start": "node_modules/.bin/webpack",
"serve": "node_modules/.bin/webpack-dev-server"
}

动用 React前端组件库 Material-UI

React Material-UI ( Material Design 设计语言的 React 组件。它在 GitHub 上的 Star 数> 4w,fork>8k,大概是最受接待的 React 组件库了,近日前卫版本是 v3.4.0。

上边大家来一步一步安装Material-UI——这么些世界上最受款待的React UI框架。Material-UI 可看作 npm 包使用。

安装宗旨重视

npm install @material-ui/core

等候信赖安装收尾,大家能够见见,此时大家的package.json文件内容新扩大了 "@material-ui/core": "^3.4.0" 的正视性:

"dependencies": { "@material-ui/core": "^3.4.0", "react": "^16.6.1", "react-dom": "^16.6.1"}

为了利用预创设的SVG Material icons,比如在组件演示中找到的这一个, 须先安装 @material-ui/icons包:

npm install @material-ui/icons

详见使用参考:

上面大家就来利用Material UI组件库,来支付两个回顾的登陆表单页面。那一个表单页面包车型地铁末尾效果如下图:

分分快三计划 18image

npm i css-loader style-loader -D

配置webpack

创建项目文件,最后结构如下:

分分快三计划 19image

文件注解如下:

  • app/index.js 入口文件

  • dist 用于盛开webpack打包输出的bundle.js

  • webpack.config.js 用于配置webpack景况。

编辑webpack.config.js配置文件

const path = require;module.exports = { entry: "./app/index.js", //入口文件 output: { path: path.join(__dirname, "/dist/"), // 所有输出文件的目标路径,绝对路径! filename: "bundle.js" }, module: { rules: [ { test: /.js$/, //babel-loader将其他文件解析为js文件 exclude: /node_modules/, loader: "babel-loader", options: { presets: ["es2015", "react"] //babel-loader需要解析的文件 } } ] }};

webpack 开箱即用,能够无需使用其余配置文件。可是,webpack 会假定项目标输入起源为 src/index,然后会在 dist/main.js 输出结果,何况在生养遭遇开启压缩和优化。

普普通通,你的品种还要求继续扩展此才具,为此你能够在品种根目录下创制二个 webpack.config.js 文件,webpack 会自动使用它。

更加多关于 webpack的安插表明参考:

src/assets/css下新建style.css

设置正视包

动用 npm install 命令继续设置 react react-dom babel 等依赖包:

npm install --save react react-domnpm install --save-dev babel-core babel-loader babel-preset-react babel-preset-es2015

本地安装的webpack命令为: ./node_modules/.bin/webpack

小编们得以因而展开 package.json ,在 "scripts": {} 中加入"start": "webpack" ,用 npm start 命令代替 webpack命令。

其失常候,我们的 package.json 文件内容形成了

{ "name": "simple-login", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "webpack", "test": "echo "Error: no test specified" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "babel-core": "^6.26.3", "babel-loader": "^8.0.4", "babel-preset-es2015": "^6.24.1", "babel-preset-react": "^6.24.1", "webpack": "^4.25.1" }, "dependencies": { "react": "^16.6.1", "react-dom": "^16.6.1" }}

那边的 babel-loader:8.0.4跟babel-core:6.26.3 版本不相配,大家改成 "babel-loader": "^7.1.5" 。

能够观察,babel、webpack正视被放置了 devDependencies 中,react 正视被停放了 dependencies中。那 package.json 文件之中的 devDependencies 和 dependencies 对象有哪些不同呢?

chrome调节台张开大家得以看到,表达HMSportage已经拉开
[HMR] Waiting for update signal from WDS...
[WDS] Hot Module Replacement enabled.
附:webpack修改每一回都重启?nodemon守护

登陆 Post代码

上面便是写三个平常的 ajax POST乞求的代码。

handleClick { console.log(event.currentTarget); const username = document.getElementById('username').value const password = document.getElementById('password').value const data = { username: username, password: password }; console.log; $.ajax({ url: '/login.json', data: data, type: 'POST', success:  => { console.log }, error:  => { console.log;};

在浏览器 console中测量试验运行,我们能够看来 POST央浼已经打响的发生了:

分分快三计划 20image

只可是,咱们还从未后端的 HTTP接口/login.json 来收纳这些乞求。所以,大家看来的是404 Not Found。这种软件开采的情势,大家得以叫做“前端驱动后端开辟”。

前端主题零部件 LoginForm.js的完整源代码如下:

import React from 'react';import PropTypes from 'prop-types';import {withStyles} from '@material-ui/core/styles';import Card from '@material-ui/core/Card';import CardContent from '@material-ui/core/CardContent';import Button from '@material-ui/core/Button';import FormControl from '@material-ui/core/FormControl';import Input from '@material-ui/core/Input';import InputLabel from '@material-ui/core/InputLabel';import FormHelperText from "@material-ui/core/es/FormHelperText/FormHelperText";import $ from 'jquery'const styles = theme => ({ container: { display: 'flex', flexWrap: 'wrap', }, button: { margin: theme.spacing.unit, }, formControl: { margin: theme.spacing.unit, display: 'flex', }, loginForm: { textAlign: 'center', }, inlineButton: { display: 'inline-flex' }, cardHeight: { height: '360px' }});class LoginForm extends React.Component { constructor { super; this.state = { helperText: '' }; // 这边绑定是必要的,这样 `this` (代表 LoginForm) 才能在回调函数中使用,例如:this.setState this.handleClick = this.handleClick.bind; this.handleUsernameChange = this.handleUsernameChange.bind; } handleClick { console.log(event.currentTarget); const username = document.getElementById('username').value const password = document.getElementById('password').value const data = { username: username, password: password }; console.log; $.ajax({ url: '/login.json', data: data, type: 'POST', success:  => { console.log }, error:  => { console.log; }; handleUsernameChange { console.log(event.currentTarget); if (event.currentTarget.value.length < 3) { this.setState({ helperText: '用户名长度不得小于3' }) } else { this.setState({ helperText: '' }) } }; render() { const {classes} = this.props; return ( <div className={classes.loginForm}> <Card className={classes.cardHeight}> <CardContent> <FormControl className={classes.formControl}> <InputLabel>用户名</InputLabel> <Input onChange={this.handleUsernameChange} autoFocus={true}/> <FormHelperText >{this.state.helperText}</FormHelperText> </FormControl> <FormControl className={classes.formControl}> <InputLabel>密码</InputLabel> <Input type='password'/> </FormControl> <div className={classes.inlineButton}> <Button onClick={this.handleClick} variant="contained" color="primary" className={classes.button}> 登陆 </Button> <Button variant="contained" className={classes.button}> 重置 </Button> </div> </CardContent> </Card> </div> ) }}LoginForm.propTypes = { classes: PropTypes.object.isRequired,};export default withStyles(LoginForm); 

下边,大家就来最前后相继端工程的费用。

本节体贴介绍轻松客商登陆模块的后端工程的花费。

npm i webpack-dev-server -D
model下增加配置

devDependencies和dependencies的区别

咱俩在使用npm install 安装模块或插件的时候,有二种命令把她们写入到 package.json 文件之中去,譬如:

--save-dev--save

在 package.json 文件之中提现出来的分别正是,使用 --save-dev 安装的 插件,被写入到 devDependencies 对象里面去,而使用 --save 安装的插件,则被写入到 dependencies 对象里面去。

devDependencies 里面包车型地铁插件只用于支付条件,不用于生产条件。而 dependencies 是亟需公布到生产条件的。

  1. 轻松易行文件增添名?resolve.extensions
编辑登录 POST 接口

笔者们先轻易重返三个结出示例:

package com.easy.springboot.simpleloginbackend.controllerimport com.easy.springboot.simpleloginbackend.result.Resultimport org.springframework.web.bind.annotation.PostMappingimport org.springframework.web.bind.annotation.RequestParamimport org.springframework.web.bind.annotation.RestController@RestControllerclass LoginController { @PostMapping(value = ["/login.json"]) fun login(@RequestParam("username") username: String, @RequestParam("password") password: String): Result<String> { return Result(data = "username=${username},password=${password}", success = true, msg = "") }}

中间,Result类的代码是:

package com.easy.springboot.simpleloginbackend.resultclass Result<T>( var data: T? = null, var success: Boolean = false, var msg: String = "")

import { ajax } from ‘libs/util’
自行引进vue/jquery ?ProvidePlugin

}
【webpack】入门德姆o 分分快三计划。loader是相比基本的一块内容,它将各个静态财富通过loader调换为js模块,三个loader包括以下几部分

├── src
│ ├── main.js
│ ├── assets
│ │ ├── css
│ │ └── img
├── README.md
├── index.html
├── package.json
├── webpack.config.js
└── yarn.lock
安装

  1. 输入(entry):告诉webpack打包从哪儿初步
  2. 出口(output):如何管理打包代码及包裹输出到怎么样地方
  3. 加载器(loaders):通过loader识别出各类财富,将这一个文件转变为模块
  4. 插件(plugins):由于加载器仅依据单个文件实行调换,插件能够做一些更头晕目眩的操作及自定义成效

node_modules/.bin/webpack-dev-server
打开 页面变为×××
笔者们得以将以此本子放在package.json中

entry: {
main: './src/main.js',
login: './src/modules/login.js',
product: './src/modules/product.js'
}
上面包车型客车入口文件都在src目录下,那么能够安装贰个基础目录,相对路线,用于从布局中深入分析入口源点(entry point)和加载器(loader)

new webpack.ProvidePlugin({
Vue: ‘Vue’
})
代码中能够绝不引进vue直接运用vue

module: {
rules: [{
test: /.js$/,
loader: 'babel-loader',
query: {presets: ['es2015']}
}]
}

  1. 图片 file-loader url-loader

机动加载模块,ProvidePlugin能够让大家没有必要引进的情况下,以大局的格局直接行使模块变量

  1. 文件查找的不二等秘书诀太长?resolve.alias缩减引用路线

    resolve: {
    extensions: ['.js', '.css'] ,
    alias: {
    'libs': path.resolve(__dirname, 'src/libs'),
    'react': 'node_modules/react/react.js'
    }
    如此在src下的其他js文件都能够平素那样引进模块,而不用../libs/util

It’s like LiveReload for every module.
当模块产生变化时,内部存储器中的bundle会收到公告,假设不影响到总体页面的成形,只会刷新局地,而毫不刷新整个页面。
设置hot为true
devServer: {
contentBase: path.join(__dirname, ''),
compress: true,
inline: true,
hot: true, **
port: 8080
},
2.添加到pligins中

运行

原地址:

devServer: {
contentBase: path.join(__dirname, 'dist'),
compress: false,
inline: true,
port: 8080
}
运行

// exports

概述

<!DOCTYPE html>
<html>
<head>
<title>webpack demo page</title>
</head>
<body>
<script src="/dist/bundle.js"></script>
</body>
</html>
设置相应的包

webpack
dist目录下生成bundle.js文件
webpack别的参数

dist下新建index.html

nodemon进程守护,用来监督你node.js源代码的别的改变,自动重启服务

url-loader是对file-loader的封装

简轻巧单安插

npm run serve
加盟进程守护nodemon

/ 4 /
/***/ (function(module, exports, __webpack_require__) {

npm i babel-core babel-preset-es2015 -D
在module.rules中添加loader节点

mkdir webpack-demo && cd webpack-demo
npm init -y
创造并走入webpack-demo,起先化三个新的档期的顺序,并创建package.json文件,’-y’表示可接受package.json的一对暗中同意值(两个npm使用技艺)
创制目录结构:

使用webpack

  1. 多页应用

// module
exports.push([module.i, "body {n background-color: #ff0;n}n", ""]);

test: 一个相称loaders所拍卖的文件的拓宽名的正则表明式(必得)
loader: loader的名称(必须)
include/exclude: 增添必需处理的文本(文件夹)或屏蔽不须要管理的文件(文件夹)(可选)
【webpack】入门德姆o 分分快三计划。query: 为loaders提供额外的装置选项(可选)
1.ES6语法的js babel-loader

【webpack】入门德姆o 分分快三计划。require(‘./assets/css/style.css’)
添加loader处理

目录结构

{test: /.(png|jpg)$/, loader: “url-loader?limit=8192”}
如此那般会将低于8kb的图片直接以base64的格式内嵌到代码中,在必然水平上收减少图片的呼吁
main.js中增加代码

npm i file-loader url-loader -D

栗子:

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 实战 后端 用户登录 script