使用在线编译器进行环境部署--->在线编译器remix
通过本地git
生成ssh
密钥
使用本地的ssh
公钥配置到github
上
github
Settings -- SSH and GPG keys
cat ~/.ssh/id_rsa.pub
测试是否配置成功 --->ssh -T git@github.com
开始将项目拉取到本地 --->由于我第一次拉取的时候提示身份验证问题.所以直接yes
跳过继续拉取
脚本部署
线上部署
brew
安装yarn
---> 使用npm
安装yarn
--->npm install -g yarn
使用yarn安装环境依赖 ---> 直接执行yarn
node.js
?node.js
是运行在服务端的JavaScript
node.js
的特性
阻塞是指:一部分node.js
代码需要等到一些非node.js
代码执行完成之后才能继续执行.
阻塞的特点:
阻塞的方法都是同步执行的
非阻塞是指:node.js
中所有与I/O
相关的方法都提供了异步版本.可以指定回调函数
非阻塞的方法都是异步执行的
事件产生者发布一个事件,事件订阅者在收到事件后执行某段代码
npm
?npm
是node.js
一起安装的包管理工具
npm
的组成部分:
npm
使用体验的主要途径CLI
通过命令行或者终端允许,开发者通过CLI
与npm
打交道npm
的基本命令?查看是否安装成功:
npm -v
升级:
npm install npm -g
安装需要的模块:
npm install <Moudle Name>
安装web
框架:
npm install express
--->安装成功后只需要在项目中require("express")
即可引用
yarn
?yarn
的定义:
Yet Another Resource Negotiator
,一个快速、可靠、安全的依赖管理工具,一款新的JavaScript
包管理工具.代码通过包(package)
的方式来共享.描述包信息的文件为package.json
Yarn
的工作流:
创建一个新项目--->添加/更新/删除依赖项--->安装/重新安装依赖项--->使用版本管理工具--->持续集成
由上面可以知道node.js
中开发者通过CLI
与包管理工具打交道.yarn
也提供了相应的命令行来处理yarn
包的各个方面
yarn add --->添加要在当前包中使用的包
yarn init --->初始化一个包的开发
yarn install --->安装
package.json文件中定义的所有依赖项 (固只需要维护一个文件即可) --->通常简单粗暴且常用
yarn publish --->包发不到包管理器
yarn remove --->从当前包中删除未使用的包
注意:
不使用命令行运行yarn
将运行yarn install
yarn
的一些指令yarn <command> [<args>]
如果命令与本地安装的CLI
匹配,Running
将运行该命令
输出包的详情:
yarn <command> --verbose
打印执行的详细信息
指定工作目录:
yarn --cwd <command>
--->指定工作目录而不是默认的./
用户自定义脚本:
Running yarn <script> [<args>]
--->运行用户定义的script
--->scripts
在pakcage.json
文件中 --->scripts
是一个构建和测试的对象,例如:
{ "name": "my-package", "scripts": { "build": "babel src -d lib", "test": "jest" } }
yarn run [script] [<args>]
--->如果在package.json
文件中定义了一个对象的话那么将会执行该对象 --->如:yarn run test
--->test
是定义在scripts
里面的一个对象
给运行的脚本带参数 --->yarn test -o --watch
此命令等价于yarn run test -o --watch
如果根据上面的json
文件执行yarn run build
的话那么会先执行yarn run prebuild
在执行yarn build
列出运行时脚本可用的环境变量:
yarn run env
列出所有可用于运行包的脚本:
yarn run
并发和--mutex
:
在同一服务器上以同一用户身份运行多个yarn
实例时,通过传递全局标志--mutex
,后跟fileor
来确保在任何给定时间仅运行一个实例(并避免冲突)network
使用Yarn
时,默认情况下会在当前工作目录中file
写入/读取互斥体文件..yarn-single-instance
还可以指定备用或全局文件名.例如:
--mutex file
--mutex file:/tep/.yarn-mutex
yarn
的依赖管理和版本管理yarn
的包依赖管理yarn
依赖类型package.json
文件是声明所有依赖项的位置,要为每个依赖项制定包名称和最低版本信息--->package.json
通过name
和version
来创建唯一的一个id
package.json
的关键字段:
name
--->例如:{"name": "my-awesome-package"}
这个name
使用在URL
当中命名提示:
不要使用与核心Node.js
模块相同的名称 不要把js
或node
放在名字里 保持名称简短且具有描述性.您希望人们从名称中了解它是什么,但它也将用于require()
通话. 确保注册表中没有同名的内容.
version
--->软件包版本
description
--->包用途描述,一段字符串
keywords
--->包管理器中搜索包时有用的字符串数组
license
--->许可证
指向包的链接:
homepage
--->文档URL
bugs
--->问题跟踪URL
repository
--->存储库,包实际代码所在的位置
维护者:
author
--->作者信息
contributors
--->贡献者
文件:
files
--->包含在项目中的文件
main
--->项目功能的主要入口
bin
--->项目中包含的可执行文件
man
--->项目相关手册页
directories
--->指定放置二进制文件、手册页、文档、示例等的确切位置
任务:
scripts
--->关联自动化任务和包的方法.举例: { "scripts": { "build-project": "node build-project.js" } }
可以被调用yarn run build-project
将运行node build-project.js
某些脚本名称是特殊的.如果已定义,preinstall
脚本会在安装包之前由yarn
调用.出于兼容性原因,名为install
、postinstall
、prepublish
和的脚本prepare
都将在软件包安装完成后调用.
start
脚本默认值node server.js
为:
{ "config": { "port": "8080" } }
实际开发过程中会有很多依赖项,例如开发需要一些依赖运行不需要,yarn
的package.json
可以实现这些不同情况下的包管理和版本控制,例如:
{ "name": "my-project", "dependencies": { "package-a": "^1.0.0" }, "devDependencies": { "package-b": "^1.2.1" }, "peerDependencies": { "package-c": "^2.5.4" }, "optionalDependencies": { "package-d": "^3.1.0" } }
dependecies
:正常依赖项,运行代码时需要的依赖项如(React
或ImmutableJS
devDependencies
:开发依赖项,开发工作流程中的某些时候需要的依赖项,但在运行代码时不需要(例如Babel
或Flow
)
peerDependencies
:对等依赖项.拥有对等依赖意味着你的包需要一个与安装你的包的人完全相同的依赖.react
这对于需要react-dom
安装它的人也使用的单个副本的软件包很有用.
optionalDependencies
:可选依赖项,如果这个里面的内容安装失败那么yarn
一样会报安装成功
bundledDependencies
:发布包时将捆绑的包名称数组,在脚本运行时也会被打包yarn pack
捆绑依赖包的使用场景:
正常依赖项从npm
注册表安装,捆绑依赖项的使用场景:
npm
注册表或已修改的第三方库时.flat
:包只允许给定依赖项的一个版本,并希望强制执行yarn install --flat
则设置其为true
{ "flat": true }
resolutions
:覆盖特定嵌套依赖项的版本,通过安装yarn install --flat
添加一个resolutions
块
.yarnc
文件功能:
允许配置其他yarn
功能,yarn
会将文件.yarnrc
合并到文件树上
关键提示:
disable-self-update-check
--->安装包时,如果CLI
安装过时,Yarn
将提供升级说明,可以在此处禁用此检查.
yarn
依赖的版本版本范围:
示例:
{ "dependencies": { "package-1": ">=2.0.0 <3.1.4", "package-2": "^0.4.2", "package-3": "~2.7.1" } }
里面的一些关键点:
版本区间:
在这里交集、并集、区间不做介绍,详情访问
预发布标签版本:例如(3.1.4-beta.2
)将仅与具有相同major.minor.patch
版本的版本匹配
连字符范围例如2.0.0 ~ 3.1.4
安装该版本号区间内的版本,扩展范围例如0.4 ~ 2
=> >=0.4.0 && <=2.0.0
的版本
x
范围任何X
,x
或*
都可用于保留部分或全部版本未指定.作用相当于占位符,例如*
扩展版本范围是>=0.0.0
(任何版本),2.x
是指>=2.0.0 && <3.0.0
的版本
波浪号范围例如~3.1.4
版本扩展范围是>=3.1.4 && <3.2.0
又如:~3
扩展版本范围是3.x
=> >=3.0.0 && <4.0.0
插入号范围例如^3.1.4
扩展版本范围到>=3.1.4 && <4.0.0
,这里的^
只控制一个小的版本.例如:0.0.2
扩展版本范围到>=0.0.2 && <0.0.3
.如果带了x
则扩展到大版本.例如:0.x
扩展版本范围到>=0.0.0 && <1.0.0
yarn
的包版本管理
yarn.lock
通过存储与包一起安装的依赖项的版本来确保包在安装之间保持一致
使用yarn.lock
文件来固化依赖,无须碰这个文件,yarn
会报关这个文件并在管理依赖项时修改这个文件.
yarn.lcok
的特点:
yarn.lock
文件是自动生成的,完全由Yarn
处理,不需要直接编译它
solidity
的代码可以编译会挂在服务端上,使用node.js
将solidity
代码作为js
的第三方包进行引用.然后模拟使用js
模拟触发solidity
的条件对solidity
代码进行调用
node.js
调用的是solidity
编译后提供的abi