【学习强国】
ss, ssr, shadowsocks, v2ray, trojan, clash
支持 macOS, Linux
安装
npm install -g n |
使用
n --latest # Output the latest node version available |
支持 macOS, Linux
支持 Linux
支持 Windows
安装
注意:1. 需要卸载已经安装的 nodejs 版本,并删除残留的 nodejs 程序目录(例如:”C:\Program Files\nodejs”)
安装 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 nvm root <path>: Set the directory where nvm should store different versions of node.js. If 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 不是一种模块化编程语言 (es6 开始支持)。为了能够尽可能的实现 js 的模块化,我们会把代码写成这样:
function fn1() { |
上面的函数 fn1() 和 fn2(),组成一个模块。使用的时候,直接调用就行了,这种做法的缺点很明显:” 污染” 了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系
为了解决上面的缺点,可以把模块写成一个对象,所有的模块成员都放到这个对象里面
var module1 = { |
上面的函数 fn1() 和 fn2(),都封装在 module1 对象里。使用的时候,就是调用这个对象的属性:module1.fn1()
但是,这样的写法会暴露所有模块成员,内部状态可以被外部改写。比如,外部代码可以直接改变内部计数器的值:module1._count = 666
// 使用 立即执行函数,可以达到不暴露私有成员的目的 |
使用上面的写法,外部代码无法读取内部的 _count 变量:console.info(module1._count) => undefined
让模块拥有更好的通用性
AMD : Async Module Definition 异步模块定义:依赖前置、提前执行: 在一开始就将所有的依赖项全部加载
CMD : Common Module Definition 通用模块定义:依赖就近、延迟执行: 在需要的时候才去 require 加载依赖项
commonJS: node.js 同步加载模块,适用于服务端
ES 标准模块化规范
异步加载模块 requireJs 库应用这一规范
// module add.js |
同步加载模块 SeaJS
// module add.js |
AMD 和 CMD 最大的区别是对依赖模块的执行时机处理不同,而不是加载的时机或者方式不同,二者皆为异步加载模块。
AMD (requirejs) 是将所有文件同时加载、一次性引入、推崇依赖前置、也就是在定义模块时要先声明其依赖的模块、加载完模块后会立马执行该模块 (运行时加载),所有模块都加载执行完后会进入 require 的回调函数,执行主逻辑,这样的效果就是依赖模块的执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来,哪个先执行,但是主逻辑一定在所有依赖加载完成后才执行
CMD (seajs) 强调的是一个文件一个模块、可按需引入、推崇依赖就近、加载完某个模块后不会立即执行,只是下载而已,所有依赖模块加载完成后进入主逻辑,遇到 require 语句的时候才执行对应的模块,这样模块的执行顺序和书写顺序是完全一致的
// AMD |
Node 应用由模块组成,采用 CommonJS 模块规范,每个文件就是一个模块,有自己的作用域
模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
在前端浏览器里面并不支持 module.exports
有四个重要的环境变量为模块化的实现提供支持:module、exports、require、global
核心模块:由 node 本身提供,不需要单独安装(npm),可直接引入使用
第三方模块:由社区或个人提供,需要通过 npm 安装后使用,比如:mime
自定义模块:由开发人员自己创建,比如:tool.js、user.js
require('fs') 加载文件操作模块 // 引入模块 |
./ 或者 ../ ,可以省略 .js 后缀,如果文件名是 index.js 那么 index.js 也可以省略 // 加载模块 |
module 变量代表的就是当前模块,它的 exports 属性就是对外的接口,加载某个模块,加载的就是 module.exports 属性,这个属性指向一个空的对象 // module.exports 指向的是一个对象,我们给对象增加属性即可 |
let m = require('./module.js') |
// 也可以直接给 module.exports 赋值,但是多次导出会覆盖 |
let m = require('./module.js') |
exports 不是 module.exports 的缩写,exports 是单独存在的
exports 和 module.exports 默认指向同一个对象
模块最终导出的一定是 module.exports 中的数据
结论:
直接添加属性两者皆可
赋值对象时,只能使用 module.exports
console.log(module.exports === exports) // ==> true |
require (‘mime’) 以 mime 为例
Modules 不是对象,import 命令会被 JavaScript 引擎静态分析,在编译时就引入模块代码,而不是在代码运行时加载,所以无法实现条件加载。也正因为这个,使得静态分析成为可能
export 导出多个模块,都放在一个对象里
export default 默认只能导出一个,一个模块只允许有一个 export default,否则报错
export default 后面不可以用 var、let、const 可用 export default function (){} function add (){}
命名导出 (Named exports)
// 导出 |
默认导出 (Default Export)
仅当源模块只有一个导出时,才建议使用此做法
// 导出 |
将默认和命名导出组合在同一模块中是不好的做法,尽管它是规范允许的。
// 导出 |
参数同 import 命令的参数,返回一个 promise 对象
import () 函数可以用在任何地方,不仅仅是模块,非模块的脚本也可以使用。它是运行时执行,也就是说,什么时候运行到这一句,才会加载指定的模块。另外,import () 函数与所加载的模块没有静态连接关系
import 命令会被 js 引擎静态分析,import 语句放在 if 代码块之中毫无意义,因此会报句法错误,即不能用于条件加载
import () 类似于 Node 的 require 方法,区别主要是前者是异步加载,后者是同步加载
应用: 按需加载,条件加载,动态模块路径
import('./module.js').then(({ export1, export2 }) => { |
同时加载多个模块
Promise.all([ |
import () 也可以用在 async 函数之中。
在 webpack 中使用 import () 动态加载模块时,webpack 默认会将所有 import () 的模块都进行单独打包,https://webpack.js.org/api/module-methods/#import-1
CommonJS 模块
// commonJsModule.js |
let m = require('./commonJsModule.js') |
ES 模块
// esModule.js |
import { num,obj, addNum } from './esModule.js' |
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 = { |
安装如下包
npm i -D @babel/cli @babel/core @babel/preset-env |
创建 index.js 文件,如下
const fn = (num) => num + 1 |
执行命令
npx babel index.js -o output.js |
输出结果为
"use strict"; |
可以看到,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");
import 被编译成了 require,如果想要编译出来的模块引入规范还是 import,则可以在 preset-env 的配置项中添加”modules”: false 即可
有时候我们项目里并没有用到那么多的新增 API,但是 @babel/polyfill 会把所有浏览器环境的的 polyfill 都引入,整个包的体积就会很大,我们想要对目标环境按需引入相应的 polyfill 应该怎么办呢,这个时候我们就可以使用 preset-env 的配置项中的 useBuiltIns 属性来按需引入 polyfill。
module.exports = { |
使用 useBuiltIns:”usage” 后,Babel 除了会考虑目标环境缺失的 API 模块,同时考虑我们项目代码里使用到的 ES6 特性,且不需要在项目入口处手动引入 polyfill
import "core-js/modules/es6.object.to-string.js"; |
可以看到 多了 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
在 Vue 组件中,可以用过 $on, $once 去监听所有的生命周期钩子函数,如监听组件的 updated 钩子函数可以写成 this.$on (‘hook:updated’, () => {})
https://cn.vuejs.org/v2/guide/components-edge-cases.html# 程序化的事件侦听器
const timer = setInterval(() => { |
<!-- 父组件中 --> |
监听第三方组件数据的变化,但是组件又没有提供 change 事件,可以在外部监听组件的 updated 钩子函数
<child-component @hook:updated="handleChildUpdated" /> |
CTList 是萌咖大佬基于 go 语言写的天翼云网盘的目录列表程序。CTList 支持多用户,支持 WebDav,整个站点目录支持在 nPlayer、PotPlayer 播放器以及 ES 文件浏览器中使用。
参考链接:https://www.moerats.com/archives/1028/
sharelist 是 reruin 大佬 node.js 开发的云盘目录程序,前端页面简洁美观
可挂载:Google Drive,One Drive,天翼云,和彩云,蓝奏云,本地文件,WebDAV,SFTP,Teambition,Baidu,Aliyun Drive
由于 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_KEY 和 GITEE_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 |
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. 关闭您的互联网连接 |
版本:
Adobe Zii 6.0.6 版本可在 Adobe CC 2021 上运行,完美支持以下版本:
Adobe Acrobat DC v20.012.20048 – 20.013.20074 |
Adobe Zii 5.3.1 版本可在 Adobe CC 2020 上运行,完美支持以下版本:
Adobe Acrobat DC v19.021.20047 – 20.012.20048 |
Adobe Zii 4.5.0 版本可在 Adobe CC 2019 上运行,完美支持以下版本:
整个Adobe CC 2015 任何版本 |
下载链接:百度云
下载地址:
适用于 2020.3.1 及以下版本
链接:https://pan.baidu.com/s/1VXTHaC2ChvXb6l5YA9iApw
提取码:wqdy