 WAF - 是时候跟正则表达式说再见WAF是时候跟正则表达式说再见 破见 weibo.com/u/5261507198 正则表达式不适合用于构建WAF 现有WAF的解决方案 如何构建未来的WAF  Part 1  Part 2  Part 3 议题内容 Part 1 正则表达式不适合用于构建WAF 感性认识—误报和漏报难以平衡 尝试寻找有理证明 WAF自身安全 正则表达式 正则表达式不适合用于构建WAF WAF绕过 WAF可被 DDOS攻击 WAF的正则 表达式规则 匹配完 整输入 是 否 存在规则大 于等于?(??) 维护几十条到几百条正则表达式规则,保证拦截率,误报率前提下,所有规则最坏 时间复杂度小于?(??),是一件很难事情。 正则表达式不适合用于构建WAF Part 2 现有WAF的解决方案 基于语义检测的WAF0 码力 | 24 页 | 1.66 MB | 1 年前3 WAF - 是时候跟正则表达式说再见WAF是时候跟正则表达式说再见 破见 weibo.com/u/5261507198 正则表达式不适合用于构建WAF 现有WAF的解决方案 如何构建未来的WAF  Part 1  Part 2  Part 3 议题内容 Part 1 正则表达式不适合用于构建WAF 感性认识—误报和漏报难以平衡 尝试寻找有理证明 WAF自身安全 正则表达式 正则表达式不适合用于构建WAF WAF绕过 WAF可被 DDOS攻击 WAF的正则 表达式规则 匹配完 整输入 是 否 存在规则大 于等于?(??) 维护几十条到几百条正则表达式规则,保证拦截率,误报率前提下,所有规则最坏 时间复杂度小于?(??),是一件很难事情。 正则表达式不适合用于构建WAF Part 2 现有WAF的解决方案 基于语义检测的WAF0 码力 | 24 页 | 1.66 MB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述0 码力 | 608 页 | 1.08 MB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述0 码力 | 608 页 | 1.08 MB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述0 码力 | 821 页 | 956.82 KB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述0 码力 | 821 页 | 956.82 KB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 目录 2 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除0 码力 | 591 页 | 21.40 MB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 目录 2 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除0 码力 | 591 页 | 21.40 MB | 1 年前3
 06 PHP基本语法 — 条件、循环、函数  杨亮 《PHP语⾔程序设计》PHP基本语法 —条件、循环、函数 杨亮 程序的基本结构 输⼊入 输出 程序 运算(+ - x / & | ! …) 逻辑(条件、循环、递归) 辅助(变量、数组、函数) ⼩小测验 ⽤用你熟悉的程序找出 1~1000中的所有质数 我们直接看代码好了 1 函数库,或者代码⽚片段 1 '; 4 ?> 1 函数 • 代码的可读性 • 代码的可重⽤用性 • 实现功能的模块化 • 实现递归调⽤用 • 使变量名不⾄至于太⻓长(作⽤用域) PHP中的函数 $res = my_function($val1, $val2); functon my_function($param10 码力 | 25 页 | 1.30 MB | 1 年前3 06 PHP基本语法 — 条件、循环、函数  杨亮 《PHP语⾔程序设计》PHP基本语法 —条件、循环、函数 杨亮 程序的基本结构 输⼊入 输出 程序 运算(+ - x / & | ! …) 逻辑(条件、循环、递归) 辅助(变量、数组、函数) ⼩小测验 ⽤用你熟悉的程序找出 1~1000中的所有质数 我们直接看代码好了 1 函数库,或者代码⽚片段 1 '; 4 ?> 1 函数 • 代码的可读性 • 代码的可重⽤用性 • 实现功能的模块化 • 实现递归调⽤用 • 使变量名不⾄至于太⻓长(作⽤用域) PHP中的函数 $res = my_function($val1, $val2); functon my_function($param10 码力 | 25 页 | 1.30 MB | 1 年前3
 Go语言基础
Golang Fundaments– 我们可以用更多的硬件来解决这个问题。 – 我们可以让更多的开发人员来解决这个问题。 • 有趣的问题——它们对你意味着什么? – 这是一个好的程序吗? – 这是一个有效的程序吗? – 是正确的吗? – 按时完成了吗? – 花了成本(时间、空间复杂度)? • 渴望成为质量、效率和简单的冠军。 • 有自己的观点。 • 重视反省和自我检讨。 Go语言应该是这样的 • 易于阅读代码 Golang-设计哲学 • 面向数据的设计(Data-Oriented Design) “数据占主导地位。如果您选择了正确的数据结构,并 且组织得很好,那么算法几乎总是不言自明的。数据结 构,而不是算法,是编程的核心。”——罗伯•派克 • 接口和组合设计(Interface And Composition Design) – 接口赋予程序结构。 – 接口鼓励通过组合进行设计。 – 接口使得并强制清晰划分组件职责。 Golang-设计哲学 • 实用主义的语言风格 – 面向编译器的静态类型语言 • 数据类型必须在编译阶段确定 • 语言能充分发挥编译优化技术 – 复古且简便的语言 • 集合了多种语言实用的语法表示 • 函数是一等公民(First-Class Functions) • 抛弃了面向对象 – 开放(几乎所有资源都在github上) • 语法基本特点 – C 语言的身体(语法基本类似C语言) – Python0 码力 | 21 页 | 851.30 KB | 1 年前3 Go语言基础
Golang Fundaments– 我们可以用更多的硬件来解决这个问题。 – 我们可以让更多的开发人员来解决这个问题。 • 有趣的问题——它们对你意味着什么? – 这是一个好的程序吗? – 这是一个有效的程序吗? – 是正确的吗? – 按时完成了吗? – 花了成本(时间、空间复杂度)? • 渴望成为质量、效率和简单的冠军。 • 有自己的观点。 • 重视反省和自我检讨。 Go语言应该是这样的 • 易于阅读代码 Golang-设计哲学 • 面向数据的设计(Data-Oriented Design) “数据占主导地位。如果您选择了正确的数据结构,并 且组织得很好,那么算法几乎总是不言自明的。数据结 构,而不是算法,是编程的核心。”——罗伯•派克 • 接口和组合设计(Interface And Composition Design) – 接口赋予程序结构。 – 接口鼓励通过组合进行设计。 – 接口使得并强制清晰划分组件职责。 Golang-设计哲学 • 实用主义的语言风格 – 面向编译器的静态类型语言 • 数据类型必须在编译阶段确定 • 语言能充分发挥编译优化技术 – 复古且简便的语言 • 集合了多种语言实用的语法表示 • 函数是一等公民(First-Class Functions) • 抛弃了面向对象 – 开放(几乎所有资源都在github上) • 语法基本特点 – C 语言的身体(语法基本类似C语言) – Python0 码力 | 21 页 | 851.30 KB | 1 年前3
 Go读书会第二期Go 读书会第二期 白明 《 Go 语言精进之路》作者 tonybai.com 博主 目 录 写书的历程 0 1 Go 语言精进之路导读 0 2 我是怎么读书的 0 3 写书的历程 第一部分 程序员的“小目标”与写书三要素 写书三要素 写书 <- 能力 +意愿 + 机会 过程 写书不易,写高质量的书更难 2018 年下 旬开始动笔 2020 年 11 月下旬 初稿交付 Part1 - 进入 Go 语言编程思维导引 站在语言设计者的高度理解 Go 的与众不同 Go 诞生 与演进 Go 设计哲 学 Go 编程思 维举例 怎么学习 Go 思维? 学习本质是一种模仿。要学习 Go 思维,就要 去模仿 go 团队、 go 社区的优秀项目和代 码,看看他们怎么做的 践行哲学,遵循惯例,认清本质,理解原理 Part2 – 项目基础:布局、代码风格与命名 践行哲学,遵循惯例,认清本质,理解原理 Go 代码都会用到的 • Go 包导入相关 • 代码块与作用域 • 控制语句的惯用法与坑 Part4 – 语法基础:函数与方法 践行哲学,遵循惯例,认清本质,理解原理 • Init 函数 • 成为“一等公民” • defer 的惯用法与坑 • 变长参数函数妙用 • 方法的本质、 receiver 参数类型选择、方法集 合 Go 程序逻辑的基本承载单元 Part5 – 语法核心:接口0 码力 | 26 页 | 4.55 MB | 1 年前3 Go读书会第二期Go 读书会第二期 白明 《 Go 语言精进之路》作者 tonybai.com 博主 目 录 写书的历程 0 1 Go 语言精进之路导读 0 2 我是怎么读书的 0 3 写书的历程 第一部分 程序员的“小目标”与写书三要素 写书三要素 写书 <- 能力 +意愿 + 机会 过程 写书不易,写高质量的书更难 2018 年下 旬开始动笔 2020 年 11 月下旬 初稿交付 Part1 - 进入 Go 语言编程思维导引 站在语言设计者的高度理解 Go 的与众不同 Go 诞生 与演进 Go 设计哲 学 Go 编程思 维举例 怎么学习 Go 思维? 学习本质是一种模仿。要学习 Go 思维,就要 去模仿 go 团队、 go 社区的优秀项目和代 码,看看他们怎么做的 践行哲学,遵循惯例,认清本质,理解原理 Part2 – 项目基础:布局、代码风格与命名 践行哲学,遵循惯例,认清本质,理解原理 Go 代码都会用到的 • Go 包导入相关 • 代码块与作用域 • 控制语句的惯用法与坑 Part4 – 语法基础:函数与方法 践行哲学,遵循惯例,认清本质,理解原理 • Init 函数 • 成为“一等公民” • defer 的惯用法与坑 • 变长参数函数妙用 • 方法的本质、 receiver 参数类型选择、方法集 合 Go 程序逻辑的基本承载单元 Part5 – 语法核心:接口0 码力 | 26 页 | 4.55 MB | 1 年前3
 成都敏捷之旅十周年/3_大卫张_敏捷是骗人的敏捷是骗人的 大卫张33 2018-12 故事是这样开始的 开始是这样的! 结果是这样的 结果是这样的! 敏捷就是快速迭代! 敏捷会议可以提升产出! 危险动作,请勿模仿! 危险动作,请勿模仿! Agile is about better. What’s the essential? 出来混,总归是要还的 互 联 网 软 件 超 越0 码力 | 18 页 | 888.08 KB | 1 年前3 成都敏捷之旅十周年/3_大卫张_敏捷是骗人的敏捷是骗人的 大卫张33 2018-12 故事是这样开始的 开始是这样的! 结果是这样的 结果是这样的! 敏捷就是快速迭代! 敏捷会议可以提升产出! 危险动作,请勿模仿! 危险动作,请勿模仿! Agile is about better. What’s the essential? 出来混,总归是要还的 互 联 网 软 件 超 越0 码力 | 18 页 | 888.08 KB | 1 年前3
 MoonBit月兔编程语言 现代编程思想 第三课 函数, 列表与递归现代编程思想 函数, 列表与递归 Hongbo Zhang 1 基本数据类型:函数 2 函数 在数学上,描述对应关系的⼀种特殊集合 对于特定的输⼊,总是有特定的输出 在计算机中,对相同运算的抽象,避免⼤量重复定义 计算半径为1的圆的⾯积: 3.1415 * 1 * 1 计算半径为2的圆的⾯积: 3.1415 * 2 * 2 计算半径为3的圆的⾯积: 3.1415 * 3 * * 3 …… fn ⾯积(半径: Double) -> Double { 3.1415 * 半径 * 半径 } 3 函数 计算半径为1、2、3的圆的⾯积: 1. let surface_r_1: Double = { let r = 1.0; pi * r * r } 2. let surface_r_2: Double = { let r = 2.0; pi * r * r } 3. let surface_r_3) 使⽤函数后 1. fn area(radius: Double) -> Double { pi * radius * radius } 2. let result = (area(1.0), area(2.0), area(3.0)) 4 顶层函数的定义 fn <函数名> (<参数名>: <类型>, <参数名>: <类型>, ...) -> <类型> <表达式块> 定义的函数接⼝让其他使⽤者⽆需关注内部实现0 码力 | 42 页 | 587.59 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第三课 函数, 列表与递归现代编程思想 函数, 列表与递归 Hongbo Zhang 1 基本数据类型:函数 2 函数 在数学上,描述对应关系的⼀种特殊集合 对于特定的输⼊,总是有特定的输出 在计算机中,对相同运算的抽象,避免⼤量重复定义 计算半径为1的圆的⾯积: 3.1415 * 1 * 1 计算半径为2的圆的⾯积: 3.1415 * 2 * 2 计算半径为3的圆的⾯积: 3.1415 * 3 * * 3 …… fn ⾯积(半径: Double) -> Double { 3.1415 * 半径 * 半径 } 3 函数 计算半径为1、2、3的圆的⾯积: 1. let surface_r_1: Double = { let r = 1.0; pi * r * r } 2. let surface_r_2: Double = { let r = 2.0; pi * r * r } 3. let surface_r_3) 使⽤函数后 1. fn area(radius: Double) -> Double { pi * radius * radius } 2. let result = (area(1.0), area(2.0), area(3.0)) 4 顶层函数的定义 fn <函数名> (<参数名>: <类型>, <参数名>: <类型>, ...) -> <类型> <表达式块> 定义的函数接⼝让其他使⽤者⽆需关注内部实现0 码力 | 42 页 | 587.59 KB | 1 年前3
 ThinkJS 1.2 中文文档ThinkJS 是⼀一款⾼高效、简单易⽤用的 Node.js MVC 框架。基于 ES6 Promise 开发,让异步编程更加简单、⽅方便。 ⾃自动启动服务 ⽀支持 Http、命令⾏行、WebSocket、Restful等多种⽅方式调⽤用 CBD 架构,MVC 模式 基于 Promise,异步编程更加简单 封装了 Db, Cache, Session 等常⽤用功能 开发模式下⽂文件修改后⽴立即⽣生效,⽆无需重启 官⺴⽹网进⾏行安装或升级。 使⽤用 ThinkJS 时,假设你已经有了 Node.js 开发相关的经验。 安装 ThinkJS ⾮非常简单,通过如下的命令即可安装: 如果安装失败,可能是 npm 服务异常或者是被墙了,可以使⽤用国内的 cnpm 服务进⾏行安装。如: 安装完成后,可以通过下⾯面的命令查看 ThinkJS 的版本号: ThinkJS 1.2 Documentation 快速⼊入⻔门 thinkjs -‐v JavaScript 如果能看到下⾯面的字符,说明已经安装成功了。 更新 ThinkJS,分成 2 种,⼀一种是更新系统的 ThinkJS 版本,更新后后续创建项⺫⽬目时使⽤用新版的 ThinkJS。另⼀一种 是更新已有项⺫⽬目下的 ThinkJS 版本。 执⾏行后,如果当前环境有浏览器,会⾃自动⽤用浏览器打开 http://127.0.0.1:8360,并且会看到如下的内容:0 码力 | 104 页 | 1.29 MB | 1 年前3 ThinkJS 1.2 中文文档ThinkJS 是⼀一款⾼高效、简单易⽤用的 Node.js MVC 框架。基于 ES6 Promise 开发,让异步编程更加简单、⽅方便。 ⾃自动启动服务 ⽀支持 Http、命令⾏行、WebSocket、Restful等多种⽅方式调⽤用 CBD 架构,MVC 模式 基于 Promise,异步编程更加简单 封装了 Db, Cache, Session 等常⽤用功能 开发模式下⽂文件修改后⽴立即⽣生效,⽆无需重启 官⺴⽹网进⾏行安装或升级。 使⽤用 ThinkJS 时,假设你已经有了 Node.js 开发相关的经验。 安装 ThinkJS ⾮非常简单,通过如下的命令即可安装: 如果安装失败,可能是 npm 服务异常或者是被墙了,可以使⽤用国内的 cnpm 服务进⾏行安装。如: 安装完成后,可以通过下⾯面的命令查看 ThinkJS 的版本号: ThinkJS 1.2 Documentation 快速⼊入⻔门 thinkjs -‐v JavaScript 如果能看到下⾯面的字符,说明已经安装成功了。 更新 ThinkJS,分成 2 种,⼀一种是更新系统的 ThinkJS 版本,更新后后续创建项⺫⽬目时使⽤用新版的 ThinkJS。另⼀一种 是更新已有项⺫⽬目下的 ThinkJS 版本。 执⾏行后,如果当前环境有浏览器,会⾃自动⽤用浏览器打开 http://127.0.0.1:8360,并且会看到如下的内容:0 码力 | 104 页 | 1.29 MB | 1 年前3
共 627 条
- 1
- 2
- 3
- 4
- 5
- 6
- 63














 
 