n

github地址

支持 macOS, Linux

安装

npm install -g n

使用

n --latest               # Output the latest node version available
n --lts # Output the latest LTS node version available
n ls # Output downloaded versions
n ls-remote [version] # Output matching versions available for download
n uninstall # Remove the installed node and npm

# 安装最新版
n latest

# 安装长期支持版本
n lts

# 安装指定版本
n 12.4.1

# 切换nodejs版本
n
# 上下键选择已安装的版本,回车切换
ο node/13.6.0
node/10.4.1

# 查看当前版本 node -v
node -v

nvm

github地址

支持 macOS, Linux

NodeSource

github地址

支持 Linux

nvm-windows

支持 Windows

github地址

安装

注意:1. 需要卸载已经安装的 nodejs 版本,并删除残留的 nodejs 程序目录(例如:”C:\Program Files\nodejs”)

  1. 删除 npm 全局安装的包(”C:\Users<user>\AppData\Roaming\npm”
  • 安装 nvm-windows 下载

  • 重新安装全局包
    安装完成后,必须为每个安装版本的node重新安装全局工具

使用

nvm-windows runs in an Admin shell. You’ll need to start powershell or Command Prompt as Administrator to use nvm-windows

NVM for Windows is a command line tool. Simply type nvm in the console for help. The basic commands are:

  • nvm arch [32|64]: Show if node is running in 32 or 64 bit mode. Specify 32 or 64 to override the default architecture.
  • nvm install <version> [arch]: The version can be a node.js version or “latest” for the latest stable version. Optionally specify whether to install the 32 or 64 bit version (defaults to system arch). Set [arch] to “all” to install 32 AND 64 bit versions.
  • nvm list [available]: List the node.js installations. Type available at the end to show a list of versions available for download.
  • nvm on: Enable node.js version management.
  • nvm off: Disable node.js version management (does not uninstall anything).
  • nvm proxy [url]: Set a proxy to use for downloads. Leave [url] blank to see the current proxy. Set [url] to “none” to remove the proxy.
  • nvm uninstall <version>: Uninstall a specific version.
  • nvm use <version> [arch]: Switch to use the specified version. Optionally specify 32/64bit architecture. nvm use will continue using the selected version, but switch to 32/64 bit mode based on the value supplied to . For information about using use in a specific directory (or using .nvmrc), please refer to issue #16.
  • nvm root <path>: Set the directory where nvm should store different versions of node.js. If is not set, the current root will be displayed.
  • nvm version: Displays the current running version of NVM for Windows.
  • nvm node_mirror <node_mirror_url>: Set the node mirror.People in China can use https://npm.taobao.org/mirrors/node/
  • nvm npm_mirror <npm_mirror_url>: Set the npm mirror.People in China can use https://npm.taobao.org/mirrors/npm/

js 模块化编程

最初 js 不是一种模块化编程语言(es6 开始支持)。为了能够尽可能的实现 js 的模块化,我们会把代码写成这样:

  1. 最原始: 封装函数写法
function fn1() {
// code
}
function fn2() {
// code
}

上面的函数 fn1()fn2(),组成一个模块。使用的时候,直接调用就行了,这种做法的缺点很明显:”污染”了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系

  1. 对象写法

为了解决上面的缺点,可以把模块写成一个对象,所有的模块成员都放到这个对象里面

var module1 = {
_count: 0,
fn1: function() {
//code
},
fn2: function() {
//code
}
}

上面的函数 fn1()fn2(),都封装在 module1 对象里。使用的时候,就是调用这个对象的属性:module1.fn1()

但是,这样的写法会暴露所有模块成员,内部状态可以被外部改写。比如,外部代码可以直接改变内部计数器的值:module1._count = 666

  1. 立即执行函数(自调用函数)写法 (沙箱模式)
// 使用 立即执行函数,可以达到不暴露私有成员的目的
var module1 = (function() {
var _count = 0 // 一般私有的变量,申明变量名时,以 _ 开头
function fn1() {
// code
}
function fn2() {
// code
}
return {
fn1: fn1,
fn2: fn2
}
})()

使用上面的写法,外部代码无法读取内部的 _count 变量:console.info(module1._count) => undefined

模块化的标准

让模块拥有更好的通用性

  • AMD : Async Module Definition 异步模块定义:依赖前置、提前执行: 在一开始就将所有的依赖项全部加载

  • CMD : Common Module Definition 通用模块定义:依赖就近、延迟执行: 在需要的时候才去 require 加载依赖项

  • commonJS: node.js 同步加载模块,适用于服务端

  • ES 标准模块化规范

AMD (Asynchronous Module Definition)

异步加载模块 requireJs 库应用这一规范

// module add.js
define(function () {
return {
add: function (a, b) { return a + b }
}
})

// main.js
// 第一个参数是要请求的模块, 第二个参数是依赖模块请求完成的回调函数
require(['add'], function (add) {
console.log('1 + 2 = ' + add(1, 2)
})

CMD (Common Module Definition)

同步加载模块 SeaJS

// module add.js
define(function(require, exports, module) {
// 正确写法
// 给 module.exports 赋值
module.exports = {
add: function (a, b) { return a + b }
}

// 或使用 return
return {
add: function (a, b) { return a + b }
}

// 错误用法
// 对 module.exports 的赋值需要同步执行,不能放在回调函数里
setTimeout(function() {
module.exports = { a: 'hello' }
}, 0)
// exports 仅仅是 module.exports 的一个引用。在 factory 内部给 exports 重新赋值时,并不会改变 module.exports 的值。因此给 exports 赋值是无效的,不能用来更改模块接口
exports = {
add: function (a, b) { return a + b }
}
})

// main.js
var { add } = require('./add') // 此处是同步加载,且可以实现条件加载,因为只有运行到该行代码的时候才会加载模块
console.log('1 + 2 = ' + add(1, 2)

// 同步加载这对服务器端不是一个问题,因为所有的模块都存放在本地硬盘,可以同步加载完成,等待时间就是硬盘的读取时间。但是,对于浏览器,这却是一个大问题,因为模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于"假死"状态

AMD 和 CMD 区别

AMD 和 CMD 最大的区别是对依赖模块的执行时机处理不同,而不是加载的时机或者方式不同,二者皆为异步加载模块。

AMD(requirejs)是将所有文件同时加载、一次性引入、推崇依赖前置、也就是在定义模块时要先声明其依赖的模块、加载完模块后会立马执行该模块(运行时加载),所有模块都加载执行完后会进入 require 的回调函数,执行主逻辑,这样的效果就是依赖模块的执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来,哪个先执行,但是主逻辑一定在所有依赖加载完成后才执行

CMD(seajs)强调的是一个文件一个模块、可按需引入、推崇依赖就近、加载完某个模块后不会立即执行,只是下载而已,所有依赖模块加载完成后进入主逻辑,遇到 require 语句的时候才执行对应的模块,这样模块的执行顺序和书写顺序是完全一致的

// AMD
define(['./a', './b'], function(a, b) {
// 依赖必须一开始就写好
a.doSomething()
b.doSomething()
})

// CMD
define(function(require, exports, module) {
var a = require('./a')
a.doSomething()
var b = require('./b') // 依赖可以就近书写
b.doSomething()
})

CommonJS 规范

Node 应用由模块组成,采用 CommonJS 模块规范,每个文件就是一个模块,有自己的作用域
模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。

在前端浏览器里面并不支持 module.exports

有四个重要的环境变量为模块化的实现提供支持:module、exports、require、global

node 中模块分类

  • 核心模块:由 node 本身提供,不需要单独安装(npm),可直接引入使用

    • fs:文件操作模块
    • http:网络操作模块
    • path:路径操作模块
    • url:解析地址的模块
    • querystring:解析参数字符串的模块
  • 第三方模块:由社区或个人提供,需要通过 npm 安装后使用,比如:mime

  • 自定义模块:由开发人员自己创建,比如:tool.js、user.js

模块导入

  • 核心模块直接引入使用:require('fs') 加载文件操作模块
// 引入模块
let fs = require('fs')
  • 第三方模块,需要先使用 npm 进行下载
  • 自定义模块,需要加上相对路径 ./ 或者 ../ ,可以省略 .js 后缀,如果文件名是 index.js 那么 index.js 也可以省略
// 加载模块
require('./a') // 推荐使用,省略 .js 后缀
require('./a.js')
  • 模块可以被多次导入,但是只会在第一次加载

模块导出

  • 在模块的内部,module 变量代表的就是当前模块,它的 exports 属性就是对外的接口,加载某个模块,加载的就是 module.exports 属性,这个属性指向一个空的对象
// module.exports 指向的是一个对象,我们给对象增加属性即可
module.exports.name = 'zs'
module.exports.age = 18

setTimeout(function() {
module.exports.gender = 'man'
}, 0)
let m = require('./module.js')
console.log(m.name) // zs
console.log(m.age) // 18
console.log(m.gender) // undefined

setTimeout(function() {
console.log(m.gender) // man
}, 0)
// 也可以直接给 module.exports 赋值,但是多次导出会覆盖
module.exports = '123'
module.exports = () => {}
module.exports = {}

// 对 module.exports 的赋值需要同步执行,不能放在回调函数里
setTimeout(function() {
module.exports = { a: 1 }
}, 0)
let m = require('./module.js')
console.log(m) // {}
setTimeout(function() {
console.log(m.a) // undefined
}, 0)

module.exports 与 exports

  • exports 不是 module.exports 的缩写,exports 是单独存在的

  • exports 和 module.exports 默认指向同一个对象

  • 模块最终导出的一定是 module.exports 中的数据

  • 结论:

    • 直接添加属性两者皆可

    • 赋值对象时,只能使用 module.exports

console.log(module.exports === exports) // ==> true

// 等价操作
module.exports.num = 123
exports.num = 123

// 赋值为新对象
exports = {}
module.exports = {}
// 模块导出的是 module.exports 指向的对象

nodejs 中 require 加载模块的规则

require(‘mime’) 以 mime 为例

  1. 如果加载的模块是一个路径,表示加载的自定义模块,根据路径查找对应的 js 文件
  2. 如果加载的模块是一个名字,不是一个路径,说明加载的是核心模块或者是第三方模块
  3. 判断是否是核心模块,如果不是核心模块,会在当前目录下查找是否有 node_modules 目录
  4. 如果有,在 node_modules 目录下查找 mime 这个文件夹,找到 mime 文件夹下的 package.json 文件,找到 main 属性,即模块的入口文件,如果没有 main,默认查找当前目录下的 index.js 文件
  5. 如果没有找到对应的模块,回去上一层目录,继续查找,一直找到根目录 C: || D: || E:
  6. 报错: can not find module xxx

ES 模块化 - import 和 export

Modules 不是对象,import 命令会被 JavaScript 引擎静态分析,在编译时就引入模块代码,而不是在代码运行时加载,所以无法实现条件加载。也正因为这个,使得静态分析成为可能

export 导出多个模块,都放在一个对象里

export default 默认只能导出一个,一个模块只允许有一个 export default,否则报错
export default 后面不可以用 var、let、const 可用 export default function(){} function add(){}

命名导出(Named exports)

// 导出
export const a = 1 // 声明后立即导出,这可以与 `var`, `let`, `const`, `class`, and `function` 配合使用

const b = 2
export { b } // 导出以前声明的值 必须用对象包裹,否则报错

export function c () {}
export const d = function () {}
export { something as somethingElse } // 在导出时重命名

// 导入
import { a, b, c, d, e } from 'test.js'
a // 1
b // 2
c // ƒ c() {}
d // ƒ d() {}
e // undefined

默认导出(Default Export)

仅当源模块只有一个导出时,才建议使用此做法

// 导出
export default a = 1
// 等价于
let a = 1
export { a as default }
// 等价于
let a = 1
export default a

// 导入
import a from 'test.js'
a // 1

// 导入的名字可以任意
import b from 'test.js'
b // 1

将默认和命名导出组合在同一模块中是不好的做法,尽管它是规范允许的。

// 导出
export default a = 1
export const b = 2
export const c = 3
// 导入
import * as tool from 'test.js'
tool.a // 1
tool.b // 2
tool.c // 3

// 或者
import a, { b as d, c } from 'test.js'

// 以下写法错误
import { b as d, c }, a from 'test.js' // x
import a, e from 'test.js' // x

es import() 函数

参数同 import 命令的参数,返回一个 promise 对象

import() 函数可以用在任何地方,不仅仅是模块,非模块的脚本也可以使用。它是运行时执行,也就是说,什么时候运行到这一句,才会加载指定的模块。另外,import() 函数与所加载的模块没有静态连接关系

import 命令会被 js 引擎静态分析,import 语句放在 if 代码块之中毫无意义,因此会报句法错误,即不能用于条件加载

import() 类似于 Node 的 require 方法,区别主要是前者是异步加载,后者是同步加载

应用: 按需加载,条件加载,动态模块路径

import('./module.js').then(({ export1, export2 }) => {
// ...
})

同时加载多个模块

Promise.all([
import('./module1.js'),
import('./module2.js'),
import('./module3.js'),
]).then(([module1, module2, module3]) => {
// ···
})

import() 也可以用在 async 函数之中。

在 webpack 中使用 import() 动态加载模块时,webpack 默认会将所有 import() 的模块都进行单独打包,https://webpack.js.org/api/module-methods/#import-1

CommonJS 模块 和 ES 模块化区别

CommonJS 模块

// commonJsModule.js
var num = 1
let obj = {}
var addNum = () => num++
var addObj = () => obj.num = num

module.exports = {
addNum, num,
addObj, obj,
get getNum() {
return num
}
}
let m = require('./commonJsModule.js')
console.log(m.num) // 1
m.addNum()
console.log(m.num) // 1
// 这里 num 输出的结果还是原来的值,因为 num 是一个原始类型的值,会被缓存
// 除非写成一个函数,才能得到内部变动的值
console.log(m.getNum) // 2

// 引用类型
console.log(m.obj) // {}
m.addObj()
console.log(m.obj) // { count: 2 }

// 重新赋值
m = {}
console.log(m.obj) // undefined

ES 模块

// esModule.js
export let num = 1
export let obj = {}
export function addNum() {
num++
}
import  { num,obj, addNum } from './esModule.js'
console.log(num) // 1
addNum()
console.log(num) // 2

// 重新赋值 报错
num = 3 // TypeError: Assignment to constant variable.
console.log(num)

// 修改属性
obj.a = 1
console.log(obj) // { a: 1 }

CommonJS 模块是运行时加载,ES6 模块是编译时输出接口
CommonJS和 ES 模块都可以对导出对象内部属性的值进行改变
CommonJS 模块输出的是一个值的拷贝,类似浅拷贝
ES 模块输出的 不论是基本类还是引用类型的数据,都是值的引用
ES 模块对导出的数据不可以重新赋值(只读状态),重新赋值会编译报错(即导出的数据指针指向不能变),但可以改变对象的属性,类似 const 声明的变量
CommonJS 模块的require()是同步加载模块,ES6 模块的import命令是异步加载,有一个独立的模块依赖的解析阶段。

CommonJS 加载的是一个对象(即module.exports属性),该对象只有在脚本运行完才会生成。而 ES6 Modules不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成。

运行时加载: CommonJS 模块就是对象;即在输入时是先加载整个模块,生成一个对象,然后再从这个对象上面读取方法,这种加载称为“运行时加载”
编译时加载: ES6 模块不是对象,而是通过 export 命令显式指定输出的代码,import 时采用静态命令的形式。即在 import 时可以指定加载某个输出值,而不是加载整个模块,这种加载称为“编译时加载”

Babel与Polyfill的关系和区别
Babel 默认只转换新的 js 句法(syntax),而不转换新的 API,例如箭头函数等
Polyfill 用于实现浏览器并不支持的原生API的代码,如新增的方法等

Babel

Babel的安装,配置

创建 babel.config.js 文件,内容如下

babel.config.js 是Babel执行时会默认在当前目录寻找的Babel配置文件,除了babel.config.js,我们也可以选择用.babelrc或.babelrc.js这两种配置文件

module.exports = {
presets: ["@babel/env"]
}

安装如下包

npm i -D @babel/cli @babel/core @babel/preset-env
  • @babel/cli是Babel命令行转码工具,如果我们使用命令行进行Babel转码就需要安装它。
  • @babel/cli依赖@babel/core,因此也需要安装@babel/core这个Babel核心npm包。
  • @babel/preset-env这个npm包提供了ES6转换ES5的语法转换规则,我们在Babel配置文件里指定使用它。如果不使用的话,也可以完成转码,但转码后的代码仍然是ES6的,相当于没有转码。

创建 index.js 文件,如下

const fn = (num) => num + 1
new Promise(() => {})

执行命令

npx babel index.js -o output.js

输出结果为

"use strict";

var fn = function fn(num) {
return num + 1;
};

new Promise(() => {});

可以看到,ES6的箭头函数语法转换成了 ES5 的函数定义语法,但是并没有对ES6的Promise进行转换。因为Babel默认只转换新的 js 语法(箭头函数,解构…),而不转换新的 API。新的API分类两类,一类是Promise、Map、Symbol、Proxy、Iterator等全局对象及其对象自身的方法,例如Object.assign,Promise.resolve;另一类是新的实例方法,例如数组实例方法[1, 2, 3].find((item) => item < 2)

polyfill

安装

npm install --save @babel/polyfill

在 index.js 中引入 import '@babel/polyfill'

执行命令

npx babel index.js -o output.js

输出结果

"use strict";

require("@babel/polyfill");

var fn = function fn(num) {
return num + 1;
};

new Promise(function () {});

输出结果中 require("@babel/polyfill");

import被编译成了require,如果想要编译出来的模块引入规范还是import,则可以在preset-env的配置项中添加”modules”: false即可

有时候我们项目里并没有用到那么多的新增API,但是 @babel/polyfill 会把所有浏览器环境的的polyfill都引入,整个包的体积就会很大,我们想要对目标环境按需引入相应的polyfill应该怎么办呢,这个时候我们就可以使用 preset-env 的配置项中的 useBuiltIns 属性来按需引入 polyfill。

module.exports = {
presets: [
[
"@babel/preset-env", {
"modules": false, // 用来设置是否把ES6的模块化语法改成其它模块化语法
"useBuiltIns": "usage",
}
]
]
}

使用useBuiltIns:”usage”后,Babel除了会考虑目标环境缺失的API模块,同时考虑我们项目代码里使用到的ES6特性,且不需要在项目入口处手动引入polyfill

import "core-js/modules/es6.object.to-string.js";
import "core-js/modules/es6.promise.js";

var fn = function fn(num) {
return num + 1;
};

new Promise(function () {});

可以看到 多了 import "core-js/... 的引用,因为 @babel/polyfil 是由core-js2和regenerator-runtime组成的一个集成包,
Babel 7.4.0 之后已经弃用了 @babel/polyfill,所以core-js官方现在推荐我们使用polyfill的时候直接引入core-js和regenerator-runtime/runtime这两个包完全取代 @babel/polyfil

core-js
babel-polyfill

在 Vue 组件中,可以用过 $on, $once 去监听所有的生命周期钩子函数,如监听组件的 updated 钩子函数可以写成 this.$on(‘hook:updated’, () => {})

使用$.once(‘hook:beforeDestory’,() => {})清理定时器

https://cn.vuejs.org/v2/guide/components-edge-cases.html#程序化的事件侦听器

const timer = setInterval(() => {
console.log('1')
}, 1000)
// 直接在需要定时器的方法或者生命周期函数中声明并销毁
this.$once('hook:beforeDestory', () => {
clearInterval(timer)
timer = null
})

在父组件监听子组件的生命周期方法

<!-- 父组件中 -->
<child-component @hook:mounted="handleChildMounted" />

监听第三方组件数据的变化,但是组件又没有提供change事件,可以在外部监听组件的updated钩子函数

<child-component @hook:updated="handleChildUpdated" />

CTList

CTList是萌咖大佬基于go语言写的天翼云网盘的目录列表程序。CTList支持多用户,支持WebDav,整个站点目录支持在nPlayer、PotPlayer播放器以及ES文件浏览器中使用。

参考链接:https://www.moerats.com/archives/1028/

sharelist

sharelist是reruin大佬node.js开发的云盘目录程序,前端页面简洁美观
可挂载:Google Drive,One Drive,天翼云,和彩云,蓝奏云,本地文件,WebDAV,SFTP,Teambition,Baidu,Aliyun Drive

项目地址:https://github.com/reruin/sharelist

由于 github Pages 和 netlify 的访问速度慢,所以现在将博客部署到 Gitee Pages

先使用 wearerequired/git-mirror-action 将 GitHub 仓库同步到 Gitee 仓库,再使用 yanglbme/gitee-pages-action 实现 Gitee Pages 的自动部署。

配置秘钥

  • 使用命令 ssh-keygen -t rsa -C "youremail@example.com" 生成 SSH Key(⚠️注意此处不要设置密码)

  • 在 GitHub 项目的「​Settings -> Secrets」路径下配置好命名为 GITEE_RSA_PRIVATE_KEYGITEE_PASSWORD 的两个密钥。其中:GITEE_RSA_PRIVATE_KEY 存放 id_rsa 私钥;GITEE_PASSWORD 存放 Gitee 帐号的密码

  • 在 GitHub 的个人设置页面「Settings -> SSH and GPG keys」​ 配置 SSH 公钥(即:id_rsa.pub),命名随意

  • 在 Gitee 的个人设置页面「安全设置 -> SSH 公钥」​ 配置 SSH 公钥(即:id_rsa.pub),命名随意

示例

name: Sync to Gitee

on:
push:
branches: [main, gh-pages]

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Sync to Gitee
uses: wearerequired/git-mirror-action@master
env:
# 注意在 Settings->Secrets 配置 GITEE_RSA_PRIVATE_KEY
SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }}
with:
# 注意替换为你的 GitHub 源仓库地址
source-repo: git@github.com:cuilongjin/hexo-blog.git
# 注意替换为你的 Gitee 目标仓库地址
destination-repo: git@gitee.com:cuilongjin/hexo-blog.git

- name: Build Gitee Pages
uses: yanglbme/gitee-pages-action@main
with:
# 注意替换为你的 Gitee 用户名
gitee-username: cuilongjin
# 注意在 Settings->Secrets 配置 GITEE_PASSWORD
gitee-password: ${{ secrets.GITEE_PASSWORD }}
# 注意替换为你的 Gitee 仓库,仓库名严格区分大小写,请准确填写,否则会出错
gitee-repo: cuilongjin/hexo-blog
# 要部署的分支,默认是 master,若是其他分支,则需要指定(指定的分支必须存在)
branch: gh-pages

越狱工具

checkra1n iPhone 5s -iPhone X, iOS 12.0 and up
unc0ver iOS 11.0 - 13.5

软件源

Ai-小苹果:http://apt.cydiabc.top
雷锋源:http://apt.abcydia.com
reprovision 作者源:https://repo.incendo.ws
Flex3官方源:http://getdelta.co
Filza官方源:http://tigisoftware.com/cydia
AudioRecorder XS 通话录音官方源:http://limneos.net/repo
Liberty Lire官方屏蔽越狱源:http://ryleyangus.com/repo
多⽶米诺⻣骨牌:http://apt.wxhbts.com
Appsync官方源:https://cydia.akemi.ai
snowboard官⽅方源:http://sparkdev.me
贴吧源:https://apt.cydiaba.cn
App Admin官⽅方源:http://beta.unlimapps.com

软件简介:

Adobe Zii 是一个苹果 Ma 端 Adobe 全家桶的通用破解程序,支持 CC 2019,CC 2020,CC 2021。

安装说明:

1. 关闭您的互联网连接
2. 安装 Adobe 软件,并点击试用
3. 然后关闭所有 Adobe 软件,启动 Adobe Zii 最新版本
4. 点击“PATCH或DRG”按钮,Zii Patcher 将扫描并修补 MAC 中已安装的所有可访问的 Adobe 软件程序

版本:

Adobe Zii 6.0.6 版本可在 Adobe CC 2021 上运行,完美支持以下版本:

Adobe Acrobat DC v20.012.20048 – 20.013.20074
Adobe After Effects 2020 v17.5-17.6
Adobe Animate 2021 v21.0.0 – 21.0.2
Adobe Audition 2020 v13.0.11 – 13.0.13
Adobe Bridge 2021 v11.0.1
Adobe Character Animator 2020 v3.4
Adobe Dimension v3.4.1
Adobe Dreamweaver 2021 v21.0.0 – 21.1.0
Adobe Illustrator 2021 v25.0.0 – 25.1.0
Adobe InCopy 2021 v16.0.0 – 16.0.2
Adobe InDesign 2021 v16.0.0 – 16.0.2
Adobe Lightroom Classic v10.0 – 10.1.1
Adobe Media Encoder 2020 v14.5 – 14.8
Adobe Photoshop 2021 v22.0.0 – 22.1.1
Adobe Prelude 2020 v9.0.1 – 9.0.3
Adobe Premiere Pro 2020 v14.5 – 14.8
Adobe Premiere Rush v1.5.34 – 1.5.44
Adobe XD v34.0.12 – 36.0.32
Adobe Photoshop Elements 2021
Adobe Premiere Elements 2021

Adobe Zii 5.3.1 版本可在 Adobe CC 2020 上运行,完美支持以下版本:

Adobe Acrobat DC v19.021.20047 – 20.012.20048
Adobe Acrobat DC v19.021.20047 – 20.012.20048
Adobe After Effects 2020 v17.0 – 17.1.4
Adobe Animate 2020 v20.0 – 20.5.1
Adobe Audition 2020 v13.0 – 13.0.10
Adobe Bridge 2020 v10.0 – 10.1.1
Adobe Character Animator 2020 v3.0 – 3.3.1
Adobe Dimension v3.0 – 3.4
Adobe Dreamweaver 2020 v20.0-20.2
Adobe Illustrator 2020 v24.0-24.3
Adobe InCopy 2020 v15.0-15.1.2
Adobe InDesign 2020 v15.0-15.1.2
Adobe Lightroom Classic v9.0 – 9.4
Adobe Media Encoder 2020 v14.0 – 14.4
Adobe Photoshop 2020 v21.0-21.2.4
Adobe Prelude 2020 v9.0 – 9.0.1
Adobe Premiere Pro 2020 v14.0-14.4
Adobe Premiere Rush v1.2.12 – 1.5.29
Adobe XD v24.0 – 33.1.12
Adobe Photoshop Elements 2020 – 2020.1(内部版本20200120.m.139570)
Adobe Premiere Elements 2020 – 2020.1

Adobe Zii 4.5.0 版本可在 Adobe CC 2019 上运行,完美支持以下版本:

整个Adobe CC 2015 任何版本
Adobe CC 2017 任何版本
Adobe CC 2018 任何版本
Adobe CC 2019 任何版本
Adobe Acrobat DC 19.x – 19.021.20049
Adobe Illustrator CC 2019 v23.1.1
Adobe InCopy CC 2019 v14.0.2
Adobe InDesign CC 2019 v14.0.3
Adobe Prelude CC 2019 v8.1.1
Adobe Premiere Pro CC 2019 v13.1.5
Adobe Premiere Rush CC v1.2.8
Adobe Photoshop CC 2019 v20.0.7
Adobe After Effects CC 2019 v16.1.3
Adobe Media Encoder CC 2019 v13.1.5
Adobe Lightroom Classic CC 2019 v8.4.1
Adobe Lightroom CC 2019 v2.3
Adobe Audition CC 2019 v12.1.5
Adobe Bridge CC 2019 v9.1.0.338
Adobe Dreamweaver CC 2019 v19.2.1
Adobe XD CC v23.1.32.2
Adobe Character Animator CC 2019 v2.1.1
Adobe Animate CC 2019 v19.2.1
Acrobat DC v19.010.20099
Adobe Dimension CC v2.1
Adobe Premiere Rush CC v1.1

下载链接:百度云

下载地址:

适用于2020.3.1及以下版本
链接:https://pan.baidu.com/s/1VXTHaC2ChvXb6l5YA9iApw
提取码:wqdy

VMware Workstation

官网下载地址

VMware Workstation Pro 16.1.0 Build 17198959
https://download3.vmware.com/software/wkst/file/VMware-workstation-full-16.1.0-17198959.exe

VMware Workstation Pro 16.0.0 Build 16894299
https://download3.vmware.com/software/wkst/file/VMware-workstation-full-16.0.0-16894299.exe

VMware Workstation Pro 15.0.0 Build 10134415
https://download3.vmware.com/software/wkst/file/VMware-workstation-full-15.0.0-10134415.exe

VMware Workstation Pro 14.1.3 Build 9474260
https://download3.vmware.com/software/wkst/file/VMware-workstation-full-14.1.3-9474260.exe

VMware Workstation Pro 12.5.9 Build 7535481
https://download3.vmware.com/software/wkst/file/VMware-workstation-full-12.5.9-7535481.exe

VMware Workstation 10.0.7 Build 2844087
https://download3.vmware.com/software/wkst/file/VMware-workstation-full-10.0.7-2844087.exe

激活许可证

VMware Workstation Pro 16 激活许可证
ZF3R0-FHED2-M80TY-8QYGC-NPKYF
YF390-0HF8P-M81RQ-2DXQE-M2UT6
ZF71R-DMX85-08DQY-8YMNC-PPHV8

VMware Workstation Pro 15 激活许可证
UY758-0RXEQ-M81WP-8ZM7Z-Y3HDA
VF750-4MX5Q-488DQ-9WZE9-ZY2D6
UU54R-FVD91-488PP-7NNGC-ZFAX6
YC74H-FGF92-081VZ-R5QNG-P6RY4
YC34H-6WWDK-085MQ-JYPNX-NZRA2
FG78K-0UZ15-085TQ-TZQXV-XV0CD
ZA11U-DVY97-M81LP-4MNEZ-X3AW0
YU102-44D86-48D2Z-Z4Q5C-MFAWD
FC7D0-D1YDL-M8DXZ-CYPZE-P2AY6

VMware Workstation Pro 14 激活许可证
FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA
CV7T2-6WY5Q-48EWP-ZXY7X-QGUWD

VMware Workstation Pro 12 激活许可证
5A02H-AU243-TZJ49-GTC7K-3C61N
VF5XA-FNDDJ-085GZ-4NXZ9-N20E6
UC5MR-8NE16-H81WY-R7QGV-QG2D8
ZG1WH-ATY96-H80QP-X7PEX-Y30V4
AA3E0-0VDE1-0893Z-KGZ59-QGAVF
ZC3TK-63GE6-481JY-WWW5T-Z7ATA

VMware Workstation Pro 10 激活许可证
1Z0G9-67285-FZG78-ZL3Q2-234JG
4C4EK-89KDL-5ZFP9-1LA5P-2A0J0
HY086-4T01N-CZ3U0-CV0QM-13DNU

解锁安装 macos

Auto-Unlocker 支持 Pro 16:https://github.com/paolo-projects/auto-unlocker/releases

下载完成后,解压 Unlocker.zip 文件放置于 VMware 根目录,并选择以管理员身份运行 Unlocker.exe 文件

可能需要关闭VMware的一切服务,包括正在运行的VMware

下载地址:
链接:https://pan.baidu.com/s/1pyTC89kIVjIDAocMAZbP4Q
提取码:wqdy

unlocker
https://github.com/DrDonk/unlocker