关于npm:jenkinsdocker实现自动测试并发布到你的npm包

背景前端的开源我的项目公布的步骤: 将代码提交到GitHub;运行单元测试;公布到npm上;以上步骤每次公布都要做一边,不仅繁冗,而且人工实现容易出错,因而通过自动化来实现这些工作变得很有必要。浏览本文须要你对应用jenkins + docker来实现自动化部署有肯定实践经验。 实现流程将代码通过git提交至GitHub;GitHub的webhook触发jenkins的pipeline工作;pipeline工作执行测试命令;测试通过后,比照npm线上的包和以后package.json中的版本号;版本号不同的状况下构建代码,登录npm,将包公布到npm;实现原理本文不打算从零开始讲述每个实现的步骤和细节,只讲实现流程中一些比拟有价值的办法和原理。 代码提交到GitHub触发jenkins的pipeline工作装置一个jenkins插件:multibranch-scan-webhook-trigger关上pipeline工作的配置,找到扫描 仓库 触发器,勾选Scan by webhook,并且在Trigger token中填入一个随机的字符串。关上GitHub代码仓库 -> 点击Settings -> 点击Webhooks-> 点击Add webhook -> 在Payload URL中填入:JENKINS_URL/multibranch-webhook-trigger/invoke?token=Trigger token,其中JENKINS_URL是你的jenkins服务地址,Trigger token则对应步骤2填入的随机字符串。实现以上配置,下次你提交代码就会主动触发对应的pipeline工作。 如何通过shell脚本登录npm公布npm包只须要执行: npm publish --access public然而前提是要先登录你的npm账户,通常状况下能够通过执行npm login,而后输出用户名、明码、邮箱即可登录,然而在jenkins中没法实现这种交互式输出的。解决办法是装置npm-cli-login,这样就能够通过以下脚本间接登录: NPM_USER=testUser NPM_PASS=testPass NPM_EMAIL=test@example.com npm-cli-login如何比照线上npm包的最新版本号和以后代码中的版本号某些状况下你只是想提交内容到GitHub上,并不想公布新的包到npm上。所以不能每次一提交代码就公布npm包的,须要先判断以后版本号是否和线上的统一,如果统一则不公布包,反之则公布。1.获取线上npm包的版本号,能够通过以下脚本获取 npm view <package name> version2.获取以后我的项目代码的版本号 node -p "require('./package.json').version"3.比照两个版本号 versionOnline=$(npm view <package name> version)versionLocal=`node -p "require('./package.json').version"`if [ "$versionOnline" != "$versionLocal" ]; then// 公布fi残缺的脚本versionOnline=$(npm view <package name> version)versionLocal=`node -p "require('./package.json').version"`if [ "$versionOnline" != "$versionLocal" ]; thennpm install -g npm-cli-login --registry=https://registry.npm.taobao.orgNPM_USER=${NPM_USER} NPM_PASS=${NPM_PASS} NPM_EMAIL=${NPM_EMAIL} npm-cli-loginnpm publish --access publicfi其它一些绝对大型的开源库还须要部署文档等操作,也能够用jenkins来实现,这样整个公布流程须要手动实现的就只剩下提交代码了。 ...

February 7, 2021 · 1 min · jiezi

关于npm:升级

vue-cli: npm i -g @vue/cli 最新版本

February 5, 2021 · 1 min · jiezi

关于npm:vue-20中引入sass的完整解决方案

1. sass-loader依赖于node-sass,所以要装置node-sass npm install node-sass --save-dev       //装置node-sassnpm install sass-loader --save-dev         //装置依赖包sass-loadernpm install style-loader --save-dev        //装置style-loader 2. 在build文件夹下的webpack.base.conf.js的module下 rules外面增加配置 {test: /.sass$/,loaders: ['style', 'css', 'sass']}, 如果我的项目没有起来报错了能够参考看以下解决方案: 1.这是vue我的项目(由vue-cli创立)引入sass后,打包我的项目呈现的谬误。这个谬误是sass-loader版本造成的 解决方案:在package.json中将 “sass-loader”:"^10.0.1"版本批改为"sass-loader": "^7.3.1",而后从新npm install 2.创立完这个文件当前,又呈现了新的谬误“Node Sass version 5.0.0 is incompatible with ^4.0.0.” 解决方案: 卸载已装置版本 npm uninstall node-sass 装置 npm install node-sass@4.14.1胜利解决问题。我的项目打包胜利最初总结一下当用vue-cli创立一个vue我的项目时,引入sass的步骤[不必配置,因为vue-cli中曾经给咱们配置好了] 1.下载安装:npm i node-sass sass-loader style-loader -D 2.能够开始用了【lang="scss"】 不想本人总结报错起因了,这是报错解决原文链接https://www.cnblogs.com/qiuyi... 看文章的时候肯定要仔细,粗枝大叶那只能耗费你本人的工夫了!!

January 31, 2021 · 1 min · jiezi

关于npm:Browserslist-caniuselite-is-outdated

Browserslist: caniuse-lite is outdated. Please run the following command: yarn upgrade 更新记录如下:yarn upgrade caniuse-lite browserslist 没用仍旧报下面的错删除node_modules 重装 == 仍旧没用删除 yarn.lock == yarn install 不报上述谬误了,我的项目build却炸了,不能随便删除lock文件啊npx browserslist@latest --update-db 参考上述操作之后,不报 Browserslist ,报 postcss autoprefixer 谬误去掉webpack.config.js 外面 postcss-loader 变得失常了遂更新 postcss-loader, autoprefixer 至最新,仍旧报错,参考stackoverflow解决了另计:换了一台电脑,执行到第四步就好了,真是难以捉摸的npm

January 29, 2021 · 1 min · jiezi

关于npm:npm-与packagejson命令

npm uninstall <package-name> --save-dev 删除指定包并落到package文件上npm install <package-name>@xx.xx --save-dev 装置指定版本号包

January 11, 2021 · 1 min · jiezi

关于npm:缓存清理

缓存清理 npm cache clean --force yarn cache clean

January 11, 2021 · 1 min · jiezi

关于npm:Git管理使用shell脚本和nodejs实现快速commit和打tag

思考前端应用npm和git进行开发工作时,会有版本号或者变更须要同步更新提交。通过commit提交更新信息时,是不是能够将commit信息利用起来,成为咱们工作时变更的版本日志数据? 话不多说,码上分享。 应用形式 执行命令: sh bin/commit.sh运行步骤 1.输出commit信息2.抉择更新类型3.抉择是否提交tag 实现形式 一、 创立相干文件 bin/commit.sh //执行脚本bin/commit.js //日志文件更新bin/version.js //package.json版本更新bin/version_log.json //版本日志文件package.json //npm依赖配置文件二、 要害代码 先带大家看一下版本日志文件 version_log.json[ { "date": "2021-01-01 00:00:00", "version": "0.0.1", "commit": "[更新]创立提交命令及更新日志脚本测试" }]这是一个规范的json格式文件,通过数组将版本信息存入其中,因为我是将最新的版本放到数组尾部,所以每次只须要提取最初一个匹配到的version信息进行辨认版本号操作 接下来是要害的sh命令,和开发者产生交互,由开发者填写本次的版本更新日志,抉择更新版本的类型,以及是否进行tag标签提交的选项#!/bin/bashcd bin/#=========读取最初一个版本信息=========versions=($(cat ./version_log.json | awk -F 'version' '/version/{print$0}' | sed 's/ //g' ))versions_length=${#versions[@]}newest_version_str=${versions[versions_length-1]}newest_version_str_length=${#newest_version_str}#获取字符前面索引值newest_version_str_length_end=$[newest_version_str_length-2-11]old_version=${newest_version_str:11:$newest_version_str_length_end}versionArr=[]v=${old_version//./ }index=0for i in $v; do versionArr[index]=$i index=$[index+1]doneread -p "请提交变动信息:" commit_msg#=========执行更新类别抉择(默认bug修复)=========commitPrefix="[修复]"echo "====== 1. 迭代 ======"echo "====== 2. 更新 ======"echo "====== 3. 修复 ======"read -p "请抉择变动类型 (默认:3) :" levelcase $level in 1) echo '您已抉择版本迭代' versionArr[0]=$[versionArr[0]+1] versionArr[1]=0 versionArr[2]=0 commit="[迭代]"$commit_msg ;; 2) echo '您已抉择小更新' versionArr[1]=$[versionArr[1]+1] versionArr[2]=0 commit="[更新]"$commit_msg ;; 3) echo '您已抉择修复' versionArr[2]=$[versionArr[2]+1] commit="[修复]"$commit_msg ;; *) echo '您已默认抉择修复' versionArr[2]=$[versionArr[2]+1] commit="[修复]"$commit_msg ;;esacnow_date=`date "+%Y-%m-%d_%H:%M:%S"`echo $now_dateversion=${versionArr[0]}'.'${versionArr[1]}'.'${versionArr[2]}echo $versionaddInfo="{\"date\":\"$now_date\",\"version\":\"$version\",\"commit\":\"$commit\"}"#=========更新版本日志文件信息=========node commit $addInfo#同步更新package.json版本号node versiongit commit -am $commitread -p "是否增加Tag(Git)1/0:" is_add_tagecho $is_add_tagif(($is_add_tag == 1 ))then echo "您已抉择推送Git标签,行将执行..." git tag $version git push origin --tags develse echo "您未抉择推送Git标签,行将完结..." git push origin devfiexit 1而后是对两个json文件的读写操作node命令commit.js ...

January 1, 2021 · 2 min · jiezi

关于npm:域名解析失败的解决方法

问题的发现最近拜访github,网页上的图片总是拜访不了,我认为公司网络禁止了,不影响,也就没有解决clone我的项目后,yarn & install都报错,报错信息如下:Error: getaddrinfo ENOENT raw.githubusercontent.com at GetAddrInfoReqWrap.onlookup域名地址解析失败,导致地址无奈连贯 解决办法查问域名对应的实在IP https://www.ipaddress.com批改host文件1). 对应地址: windows: %systemroot%\system32\drivers\etclinux: /etc/hosts2).关上文件后增加在1上查找到的地址和ip(这个对应的须要本人去查一下,网上一些旧的用也是不能够的)eg: # github相干52.74.223.119 github.com192.30.253.119 gist.github.com54.169.195.247 api.github.com185.199.111.153 assets-cdn.github.com151.101.108.133 user-images.githubusercontent.com199.232.96.133 gist.githubusercontent.com199.232.96.133 cloud.githubusercontent.com199.232.96.133 camo.githubusercontent.com199.232.96.133 raw.githubusercontent.com199.232.96.133 avatars0.githubusercontent.com199.232.96.133 avatars1.githubusercontent.com199.232.96.133 avatars2.githubusercontent.com199.232.96.133 avatars3.githubusercontent.com199.232.96.133 avatars4.githubusercontent.com199.232.96.133 avatars5.githubusercontent.com199.232.96.133 avatars6.githubusercontent.com199.232.96.133 avatars7.githubusercontent.com199.232.96.133 avatars8.githubusercontent.comwindows 批改host失效办法关上cmd窗口ipconfig /displaydns &:: # 显示所有 dns内容 ipconfig /flushdns &:: # 刷新所有 dns内容原理要理解这个问题的实质,咱们应该回忆一下,一个网页关上的时候,通过了哪些解决,用一张图看一下 从上图能够看到,咱们域名解析先会拿本地的缓存(浏览器/电脑),当咱们无奈域名解析失败的时候,咱们能够先去https://www.ipaddress.com网站查问网站对应的ip信息,用缓存的形式间接在本地增加对应的解析规定,这样便能够失常拜访

December 29, 2020 · 1 min · jiezi

关于npm:教你如何把HackTheBox里面的Luke干掉

与平常一样,第一步是对主机进行Nmap辨认正在运行的服务: `Nmap scan report for 10.10.10.137Host is up (0.042s latency).Not shown: 65464 closed ports, 66 filtered portsPORT STATE SERVICE VERSION21/tcp open ftp vsftpd 3.0.3+ (ext.1)| ftp-anon: Anonymous FTP login allowed (FTP code 230)|_drwxr-xr-x 2 0 0 512 Apr 14 12:35 webapp| ftp-syst: | STAT: | FTP server status:| Connected to 10.10.13.75| Logged in as ftp| TYPE: ASCII| No session upload bandwidth limit| No session download bandwidth limit| Session timeout in seconds is 300| Control connection is plain text| Data connections will be plain text| At session startup, client count was 1| vsFTPd 3.0.3+ (ext.1) - secure, fast, stable|_End of status22/tcp open ssh?80/tcp open http Apache httpd 2.4.38 ((FreeBSD) PHP/7.3.3)| http-methods: |_ Potentially risky methods: TRACE|_http-server-header: Apache/2.4.38 (FreeBSD) PHP/7.3.3|_http-title: Luke3000/tcp open http Node.js Express framework|_http-title: Site doesn't have a title (application/json; charset=utf-8).8000/tcp open http Ajenti http control panel|_http-title: AjentiNo exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).TCP/IP fingerprint:OS:SCAN(V=7.70%E=4%D=8/13%OT=21%CT=1%CU=33830%PV=Y%DS=2%DC=T%G=Y%TM=5D52853OS:5%P=x86_64-pc-linux-gnu)SEQ(SP=101%GCD=1%ISR=10D%TI=Z%CI=Z%II=RI%TS=21)OOS:PS(O1=M54DNW6ST11%O2=M54DNW6ST11%O3=M54DNW6NNT11%O4=M54DNW6ST11%O5=M54DNOS:W6ST11%O6=M54DST11)WIN(W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FFFF)EOS:CN(R=Y%DF=Y%T=40%W=FFFF%O=M54DNW6SLL%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%FOS:=AS%RD=0%Q=)T2(R=N)T3(R=Y%DF=Y%T=40%W=FFFF%S=O%A=S+%F=AS%O=M54DNW6ST11%ROS:D=0%Q=)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%OS:S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(OS:R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%IPL=164%UN=0OS:%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=S%T=40%CD=S)Network Distance: 2 hopsTRACEROUTE (using port 587/tcp)HOP RTT ADDRESS1 40.68 ms 10.10.12.12 40.94 ms 10.10.10.137OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 4814.02 seconds` * 1* 2* 3* 4* 5* 6* 7* 8* 9* 10* 11* 12* 13* 14* 15* 16* 17* 18* 19* 20* 21* 22* 23* 24* 25* 26* 27* 28* 29* 30* 31* 32* 33* 34* 35* 36* 37* 38* 39* 40* 41* 42* 43* 44* 45* 46* 47* 48* 49* 50* 51* 52* 53从该输入中咱们能够看到有很多凋谢的端口。我看到的第一个是FTP,因为它容许匿名登录。 ...

December 26, 2020 · 4 min · jiezi

关于npm:教你如何把HackTheBox里面的Luke干掉

与平常一样,第一步是对主机进行Nmap辨认正在运行的服务: `Nmap scan report for 10.10.10.137Host is up (0.042s latency).Not shown: 65464 closed ports, 66 filtered portsPORT STATE SERVICE VERSION21/tcp open ftp vsftpd 3.0.3+ (ext.1)| ftp-anon: Anonymous FTP login allowed (FTP code 230)|_drwxr-xr-x 2 0 0 512 Apr 14 12:35 webapp| ftp-syst: | STAT: | FTP server status:| Connected to 10.10.13.75| Logged in as ftp| TYPE: ASCII| No session upload bandwidth limit| No session download bandwidth limit| Session timeout in seconds is 300| Control connection is plain text| Data connections will be plain text| At session startup, client count was 1| vsFTPd 3.0.3+ (ext.1) - secure, fast, stable|_End of status22/tcp open ssh?80/tcp open http Apache httpd 2.4.38 ((FreeBSD) PHP/7.3.3)| http-methods: |_ Potentially risky methods: TRACE|_http-server-header: Apache/2.4.38 (FreeBSD) PHP/7.3.3|_http-title: Luke3000/tcp open http Node.js Express framework|_http-title: Site doesn't have a title (application/json; charset=utf-8).8000/tcp open http Ajenti http control panel|_http-title: AjentiNo exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).TCP/IP fingerprint:OS:SCAN(V=7.70%E=4%D=8/13%OT=21%CT=1%CU=33830%PV=Y%DS=2%DC=T%G=Y%TM=5D52853OS:5%P=x86_64-pc-linux-gnu)SEQ(SP=101%GCD=1%ISR=10D%TI=Z%CI=Z%II=RI%TS=21)OOS:PS(O1=M54DNW6ST11%O2=M54DNW6ST11%O3=M54DNW6NNT11%O4=M54DNW6ST11%O5=M54DNOS:W6ST11%O6=M54DST11)WIN(W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FFFF)EOS:CN(R=Y%DF=Y%T=40%W=FFFF%O=M54DNW6SLL%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%FOS:=AS%RD=0%Q=)T2(R=N)T3(R=Y%DF=Y%T=40%W=FFFF%S=O%A=S+%F=AS%O=M54DNW6ST11%ROS:D=0%Q=)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%OS:S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(OS:R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%IPL=164%UN=0OS:%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=S%T=40%CD=S)Network Distance: 2 hopsTRACEROUTE (using port 587/tcp)HOP RTT ADDRESS1 40.68 ms 10.10.12.12 40.94 ms 10.10.10.137OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 4814.02 seconds` * 1* 2* 3* 4* 5* 6* 7* 8* 9* 10* 11* 12* 13* 14* 15* 16* 17* 18* 19* 20* 21* 22* 23* 24* 25* 26* 27* 28* 29* 30* 31* 32* 33* 34* 35* 36* 37* 38* 39* 40* 41* 42* 43* 44* 45* 46* 47* 48* 49* 50* 51* 52* 53从该输入中咱们能够看到有很多凋谢的端口。我看到的第一个是FTP,因为它容许匿名登录。 ...

December 26, 2020 · 4 min · jiezi

关于npm:npm-link

npm link 办法,可在我的项目开发中应用 npm 包,用于排查问题,或不便的检测 npm 包在我的项目中的应用 npm 包cd [module]npm link我的项目内cd examplenpm link [module]

December 18, 2020 · 1 min · jiezi

关于npm:npm-报错

1.“This is probably not a problem with npm. There is likely additional logging output above. ”解决办法: rm -rf node_modulesrm package-lock.jsonnpm cache clear --forcenpm install2 “npm ERR! A complete log of this run can be found in: npm ERR! D:\node\node_cache\_logs\2020-06-13T08_12_35_648Z-debug.log” 解决办法 npm install npm -g npm install 装置一下依赖即可npm 报错个别是短少依赖 【视状况 认真看报错信息】文件援用谬误 【视状况 认真看报错信息】node_moudule依赖问题 【删除从新下载】webpack版本问题 【版本过高,升高版本】node的版本问题 【版本过高,升高版本】

December 15, 2020 · 1 min · jiezi

关于npm:yarn-npm-使用的正确姿势

一个跟npm一样的包管理工具Yarn 缓存了每个下载过的包,所以再次应用时无需反复下载。 这一点也是我喜爱的一点,下载十分稳,不存在丢包状况 装置 假如你曾经装过Node重置缓存地位 如果你windows用户, 你会发现为什么系统盘会越来越大,越来越卡,因为你所下载的模块都缓存默认缓存到了C盘,npm npm cache clean --force //革除缓存//批改全局模块地位npm list -g --depth 0 // 查看npm全局模块npm config set prefix "D:Program Filesnodejsnode_modulesnpmData" //必须字符串 npm list -g --depth 0 // 在查看npm全局模块//以前的模块能够间接删掉//批改缓存地位npm config get cache //查看缓存地位npm config set cache "D:Program Filesnodejsnode_modulesnpmData"npm config get cache //查看缓存地位// 留神 须要设置目录零碎环境变量// 如果不会 百度一哈 这个是惯例操作 // 将这个门路增加 零碎Path D:Program Filesnodejsnode_modulesnpmData yarn 装置 yarnnpm i yarn -g // 应用命令行装置yarn --version // 胜利呈现版本号 操作,根本与下面统一yarn cache clean //革除历史缓存// 全局模块装置地位批改yarn global dir //查看yarn config set global-folder D:yarnDataglobal //主动创立文件夹yarn global dir //查看目录地位//批改缓存地位yarn cache dir //显示yarn显示地位yarn config set cache-folder D:yarnDataglobal yarn cache dir //在输入一下目录 看看缓存地位// 留神 须要设置目录零碎环境变量,留神是bin 目录否则无奈找到模块// 将这个门路增加 零碎环境 Path D:yarnDataglobalnode_modules.bin 源管理工具 ...

December 7, 2020 · 2 min · jiezi

关于npm:搭建超级小班课网课系统

简介本场景介绍应用视频云技术搭建超级小班课网课零碎。 阿里云体验实验室地址(阿里云ECS体验场景体验)https://developer.aliyun.com/... 背景常识音视频通信: 音视频通信 RTC(Real-Time Communication)是阿里云笼罩寰球的实时音视频开发平台,提供高可用、高品质、超低延时的实时网络服务,实用于在线教育、互动娱乐、视频会议、保险定损、调度指挥等场景。应用阿里云RTC SDK,您能够在挪动、Web、PC等多端疾速搭建互通互联的实时音视频利用。 超级小班课: 超级小班课是将千名学生以小组模式分成若干小班(举荐4-6名为一组),同时由一名主讲名师和多名助教进行辅导。所有学生均能够实时观看主讲名师授课画面,并能够与名师进行连麦互动。多名助教实时关注小班内学生动静,保护小班课堂秩序,并可连麦小班内学生进行助教辅导。该场景不仅能够让优良的名师辅导更多的学生,更能够保障学生之间的互动性,让学生的学习效果大大增加。 超级小班课解决方案实用于K12和少儿语培等教育场景。 获取音视频通信利用AppKey1.应用您本人的阿里云账号登录到音视频通信RTC控制台。2.在左侧单击利用治理。3.在利用治理页面就能够看到您的默认利用的AppID。4.在默认利用的右侧操作列单击查问AppKey。 在查问Appkey提醒弹框中单击确定。 在查问胜利的弹框中就能够看到AppKey。连贯ECS服务器1.关上零碎自带的终端工具。 Windows:CMD或Powershell。MAC:Terminal。2.在终端中输出连贯命令ssh [username]@[ipaddress]。您须要将其中的username和ipaddress替换为第1大节中创立的ECS服务器的登录名和公网地址。例如: ssh root@123.123.123.123命令显示后果如下: 输出yes。批准持续后将会提醒输出登录明码。 明码为已创立的云服务的ECS的登录明码。登录胜利后会显示如下信息。 装置Node.js环境1.执行以下命令下载Node.js二进制包。 wget https://nodejs.org/dist/v14.15.0/node-v14.15.0-linux-x64.tar.xz2.执行以下命令将Node.js二进制包解压到门路/usr/local。 tar xf node-v14.15.0-linux-x64.tar.xz -C /usr/local/ --no-same-owner3.执行以下命令将Node.js二进制文件所在门路退出到环境变量PATH中。 echo "export PATH=/usr/local/node-v14.15.0-linux-x64/bin:$PATH" >> /etc/profile4.执行以下命令使批改的环境变量立刻失效。 source /etc/profile5.执行以下命令验证是否装置配置胜利。 node -v如果装置胜利将会有相似如下显示。 批改配置本场景中的ECS服务器/root门路中内置了超级小班课的我的项目源码和运行环境,在我的项目源码中填入本人的AppKey即可运行我的项目。1.执行以下命令应用Vim关上config.js文件。 cd superclass_web/ && vim src/core/data/config.js2.按下i键进入编辑模式,将appId和appKey批改为步骤二中查问到的AppId和AppKey。3.批改实现后按下Esc键退出编辑模式,而后输出以下指令并按下回车键退出Vim编辑器。 :wq运行Demo1.执行以下命令装置我的项目依赖。 npm install2.执行以下命令装置RTC SDK。 npm install aliyun-webrtc-sdk -S3.执行以下命令运行我的项目。 npm run serve运行胜利之后,默认会在浏览器关上我的项目主页。如果没有主动关上,请在浏览器地址栏输出https://[ipaddress]:888,ipaddress请参见步骤三。 Demo源码解析我的项目构造如下所示: ├── dist #打包文件├── public #动态资源├── src #我的项目文件目录│ ├── assets #动态资源 │ ├── components #公共组件│ ├── core #js文件│ │ ├── data│ │ │ ├── config.js #相干配置参数│ │ ├── util│ │ │ ├── utils.js #一些公共办法│ │ ├── rtc-engine.js #单例│ │ ├── rtc-clinet.js #RTC实例文件│ ├── plugins│ ├── router #路由│ ├── views #页面│ │ ├── login │ │ │ ├── login.vue #登录页面│ │ ├── student │ │ │ ├── student.vue #学生页面│ │ ├── assistant │ │ │ ├── assistant.vue #助教页面│ │ ├── teacher │ │ │ ├── teacher.vue #老师页面│ ├── vuex│ ├── App.vue #根组件│ ├── main.js #入口文件├── vue.config.js #vue配置文件上面列出了一些要害性功能代码。 ...

November 30, 2020 · 2 min · jiezi

关于npm:npm发布报错-403-Forbidden-PUT-httpsregistrynpmjsorg

首次注册npm账户,公布npm包报错npm ERR! code E403npm ERR! 403 403 Forbidden - PUT https://registry.npmjs.org/lanke-template-h5 - Forbiddennpm ERR! 403 In most cases, you or one of your dependencies are requestingnpm ERR! 403 a package version that is forbidden by your security policy.npm ERR! A complete log of this run can be found in:npm ERR! D:\NodeJS\node_cache\_logs\2020-11-27T03_42_41_070Z-debug.log解决方案:首次注册,没有验证邮箱,去邮箱按步验证,再次公布即可解决

November 27, 2020 · 1 min · jiezi

关于npm:bash-不是内部或外部命令也不是可运行的程序或批处理文件

windows下降级node.js, 在cmd 运行" n stable"报错"'"bash"' 不是外部或外部命令,也不是可运行的程序 或批处理文件。"windows下降级node.js, 在cmd 运行" n stable"报错"’“bash”’ 不是外部或外部命令,也不是可运行的程序 或批处理文件。在GitHub官网,搜寻gnvm,下载放在node.js的装置目录下 而后关上cmd命令行窗口,输出:gnvm update latest,期待更新。当然也能够间接笼罩.参考文章:https://jingyan.baidu.com/album/9158e000fc556ea2541228e2.html?picindex=1.

November 24, 2020 · 1 min · jiezi

关于npm:本地包调试-npm-link

引子再次碰到调试 npm 本地包的状况,一时想不起来,看了下文档,实际操作了一下,发现了一些文档上没明写的货色。 OriginMy GitHub介绍依据文档介绍,包的链接分为两步。 第一步在一个包文件夹内执行 npm link 将在全局文件 {prefix}/lib/node_modules/<package> 内,创立一个符号链接(symlink),这个链接指向 npm link 命令执行的中央。 第二步到其它目录下,执行 npm link packageName 命令,将会创立一个从全局装置的 packageName 到以后文件内的 node_modules 下的符号链接。 须要留神的的是, packageName 是取自包的 package.json 中 name 字段,不是文件夹名称。 包的名称可能有作用域前缀,如果有, packageName 也要对应加上。 实际基于文档,结合实际的操作,对照看下产生的成果。 运行环境我的项目是基于 webpack 简略配置,本地运行的 server 。node 应用 nvm 治理的。我的项目已援用了包,需在根底上进行批改调试。零碎是 macOS 。操作首先在包根目录上面执行 npm link 命令,呈现上面的提醒: 到对应的目录下,发现生成了提醒中所说的文件,就是文档中所说符号链接(symlink): 试着改了一下本地的源文件,发现全局包外面对应的文件内容也跟着变动。 而后到我的项目中执行 npm link packageName 指令,呈现了上面的提醒: 到 node_modules 下发现对应的依赖包曾经产生了变动: 这里的包跟全局那个生成的包是一样的,包更新了,本地看没什么成果,起因是本地的 sever 有缓存,须要重新启动一下。留神这个文件夹图标多了一个箭头的标记,未 link 之前没有这个。 ...

November 23, 2020 · 1 min · jiezi

关于npm:npm-发布包遇到的问题

引子尽管有公布过包的经验,但没有公布过本人的包,于是就参照 npm developer guide 尝试了一下,有了上面的播种。 OriginMy GitHub403 Forbidden依照文档中的步骤,注册登录后,筹备好了库,而后执行 npm publish,报了上面的谬误: Error: 403 Forbidden - PUT https://registry.npmjs.org/xx - You do not have permission to publish "xx". Are you logged in as the correct user?查问材料后,发现了这个 issue,原来是因为公开的库外面,曾经有了同名的库。因为是收费的账号,所以想在 npm 上发包,要么换个名称,要么花钱创立公有包。还有一种形式就是在内网搭建本人的服务。 Error: 402 Payment Required换了个名字,想起了本人见过的库,就模拟加了个 @ 前缀的包,再次公布的时候,报了上面的谬误: Error: 402 Payment Required - PUT https://registry.npmjs.org/@x... - You must sign up for private packages查看文档,发现 @npm/package-name 这种模式的包名,是有作用域的包名模式,执行 npm publish 的时候默认是公布公有的包。因而,第一种形式是花钱买公有包的服务,另外一种形式就是指定参数,示意公开: npm publish --access public须要留神的是这种模式的包名跟 npm 账户有对应关系,不能轻易填写。 ...

November 16, 2020 · 1 min · jiezi

关于npm:译npm-developer-guide

引子在 npm Getting started 之后,发现了 npm-developers 这篇文档,介绍从开始、本地测试、打包到公布的一个绝对残缺的流程。感觉是 Getting started 的一个补充,于是就把篇文档翻译成中文,加深下印象。 原文:npm-developers。 OriginMy GitHub简述所以,你曾经打算应用 npm 来开发(并且可能公布或部署)你的我的项目了。 太棒了! 在你的用户安装程序的简略步骤之上,您须要做一些事件。 对于这些文档这些是手册页。如果你装置了 npm,你应该能够在 npm 手册中找到特定主题的文档,或者通过 npm 帮忙来获取雷同的信息。 一个 package 是什么一个 package 是: 1. 一个蕴含了形容程序的 package.json 文件的文件夹。2. 蕴含有一个 gzip 压缩的压缩包(在 1 的根底上)。3. 一个解析为(2)中包的 url。4. 一个曾经在登记处公布的 <name>@<version>(在 3 的根底上)。5. 一个指向的(4)的 <name>@<tag>。6. 一个称心的有 “latest” 标签的 <name>(在 5 的根底上)。7. 一个克隆的 git 仓库链接,指向(1)中的文件夹。即便你素来没有公布过你的包,如果你只是想写一个 node 我的项目,或者在打包成压缩包后,你想在其它中央能很容易的装置,你依然能够从应用 npm 中受益匪浅。 Git 的链接可是上面的一些模式: git://github.com/user/project.git#commit-ishgit+ssh://user@hostname:project.git#commit-ishgit+http://user@hostname/project/blah.git#commit-ishgit+https://user@hostname/project/blah.git#commit-ishcommit-ish 能够是任何的 tag、sha 或者可能提供给 git checkout 作为参数的分支名。默认值是 master。 ...

November 9, 2020 · 2 min · jiezi

关于npm:npm-Getting-started

引子最近工作上要接触相干的货色,开始相熟文档,这里次要是 Getting started 局部中,感觉有帮忙的内容记录。 OriginMy GitHub组成npm 蕴含三个不同的局部: 网站命令行界面(CLI)登记处通过应用网站,能够查找发现包、设置简介、治理你的其它方面 npm 经验。比方,你能够建设 Orgs ,用来治理共有或公有的包。 命令行界面通过终端运行,这个是大多数开发者与 npm 交互的形式。 登记处是一个蕴含大量 JavaScript 软件和元信息的公开信息库。 注册依照提醒注册后,用 npm 测试登录。 npm login依据提醒输出帐号、明码、邮箱。输出后检测是否登录胜利 npm whoami如果显示出你的用户名,示意登录胜利。 配置本地环境对于 npm CLI 版本npm 命令行界面依照肯定的节奏失常公布。举荐装置的版本: latest release:最新的稳固版本。next release:最新的未公布的版本,行将成为最新版本。装置 Node.js 的时候,npm 会主动装置。然而 npm 的版本更新比 Node.js 频繁的多,所以装置最新稳固版本的 npm 指令如下: npm install npm@latest -g装置 next release 版本指令为: npm install npm@next -g须要留神的是,next release 版本蕴含的性能,在最新的稳固版本中不肯定会有。 装置强烈建议用 Node 版本管理工具来装置 Node.js 和 npm。不要应用 Node 装置工具,因为 Node 装置过程装置 npm 须要本地文件的容许,当运行全局 npm 包的时候可能会导致权限谬误。查看npm Node的版本 ...

November 2, 2020 · 1 min · jiezi

关于npm:npm-依赖管理中一些重要的细节

前言npm(全称 Node Package Manager,即“node包管理器”)是Node.js预设的、用JavaScript编写的包管理工具。尽管是Node.js中的工具,但当初更多的被用来配合前端构建工具给前端进行包治理。 作为一个包管理器,最重要的就是治理依赖了。对于简单的依赖树,npm 的解决机制和其余的包管理器会有所不同,本文将会具体介绍这些细节 npm2和npm3+版本对依赖的解决有所不同,但当初很少有应用npm3以下版本的我的项目了,本文中所有的介绍都是基于npm3+以上版本 npm 依赖管理机制npm 大体上来看,和其余的包管理器差不多,都是包依赖包,并且用版本号来申明这些依赖的包。 语义化版本号npm 中应用语义化版本来管制版本依赖包的版本,比方^~>=<之类的范畴符号,不过本文中版本号的解析形式不是重点,只须要晓得如果应用范畴版本号,npm会装置范畴内可用的最新版本**这里要吐槽一下npm的文档,光是找这个范畴版本号具体应用的版本策略,就找了很久,文档中并没有清晰的阐明……最初在npm update页面中找到了一丝介绍 If app’s package.json contains:"dependencies": {"dep1": "^1.1.1"} Then npm update will install dep1@1.2.2, because 1.2.2 is latest and 1.2.2 satisfies ^1.1.1. npm的这个范畴版本设计的理念还是挺先进的,通过范畴版本号让应用方能够及时的自动更新小版本,降级后可能修复一些bug,然而随之而来的也会有很多因更新导致的危险。毕竟版本号是人类管制的,人类管制就有可能呈现失误,比方一个订正版本号的更新中删除了某些api,导致无奈兼容 集体看来,这种范畴版本号的包管理机制,是弊大于利的,危险过高。如果在服务端场景下,什么都没改的状况下就偷摸换了个(小)版本,很可能会呈现一些重大的事变。一般来说,任何改变都须要通过测试,尤其是这种依赖包降级,是个挺有危险的事件。如果是那种通用根底包的危险就更大了,援用的中央过多,很可能呈现一些不兼容的状况。 依赖树和传递依赖npm 会默认会将传递依赖的包用flat的模式,也装置至node_modules的根目录,比方有一个模块A,他依赖了模块B:** 版本抵触当初减少一个模块C,C也依赖B,然而C依赖了B的高版本V2.0,此时npm的解决就有点不一样了;因为C依赖的B模块版本和A依赖的B版本不兼容,npm 会先将A模块依赖的B1.0装置至根目录,而后将C依赖的B2.0装置至C本人的node_modules中,如下图所示目录构造 |————mod-A@1.0|————mod-B@1.0|————mod-C@1.0 |————mod-B@2.0对于版本不兼容的依赖树,npm的解决是先查看是否版本兼容,如果版本兼容就不反复装置,如果和之前的的传递依赖包版本不兼容,那么就将该依赖包装置至以后援用的包的node_modules下**npm 的包版本抵触解决方案尽管带来了包文件的 冗余,但能够很好的解决抵触问题 这种版本抵触解决机制真的很完满吗?素来面的介绍能够看出,当呈现版本不兼容时,npm会将依赖的包装置至以后包的node_modules下,有点submodule的意思,但也不是真的十拿九稳,还是有可能呈现因为多版本共存导致的抵触。 还是拿下面的A/B/C三个依赖模块来举例,比方B v1.0中向window对象注册了一个属性,B v2.0也向window中注册了一个属性,因为B v1.0和v2.0差距很大,尽管注册的是同一个对象,但属性和其函数差距很大,当一个页面同时引入A和C模块时,B v1.0和B v2.0都会加载,可能会呈现一些意外的谬误。对于使用者来说是不能承受的 下面这个例子可能还不是很失当,因为注册window这件事原本就有肯定危险。当初构想另一种常见的场景,比方有在Angular(2)中,两个基于Angular的组件依赖了不同的Angular(Core)大版本,那么当一个页面同时应用两个组件,并且两个组件须要在以后页面进行交互时,比方赋值或者函数调用之类,就很容易呈现上图中的问题。 这种问题在Java生态中的包治理尽管也有,但模式会有所不同: 在Maven中(Java生态的包管理工具),尽管依赖是树状构造的,但构建后的后果其实是立体(flat)的的。如果呈现多个版本的jar包,运行时个别会将所有jar包都加载;不过因为JAVA中ClassLoader的parent delegate机制,同样的Class只会被加载一次,下N个Jar包内的的同名类(包名+类名)会被疏忽,这样的益处是简略,如果呈现版本抵触也清晰可见,抵触问题须要使用者自行处理。 Maven Build对包(传递)依赖多版本的解决,如下图所示:npm 对于这种可能呈现的版本抵触问题,也提供了一个解决办法:peerDependencies peerDependenciespeerDependencies和maven中的provide scope很像,当一个依赖模块X定义在peerDependencies中而不是devDependencies或dependencies中时,依赖该模块的我的项目就不会主动下载该依赖。 我的项目中须要间接或间接的申明合乎该版本的依赖,间接依赖是指间接在devDependencies或dependencies中申明,间接依赖是指以后我的项目依赖的其余模块依赖了X合乎版本范畴的模块,如果二者都不满足,在npm install时会呈现一个告警,比方: npm WARN hidash@0.2.0 requires a peer of lodash@~1.3.1 but none is installed. You must install peer dependencies yourself.npm & webpack当初很多我的项目都会应用webpack来作为我的项目的构建工具,然而和java中的maven 不同,webpack和npm是两套独立的工具,构建和包治理是离开的 ...

October 25, 2020 · 1 min · jiezi

关于npm:独家下载Java工程师成神之路基础篇

简介: 初学Java的你还在懊恼不晓得怎么去学,学习什么内容吗?那么多的技术书籍是否曾经让你无从下手?别急,来看这一份残缺的Java学习门路。 复制该链接到浏览器实现下载或分享:https://developer.aliyun.com/topic/download?id=923初学Java的你还在懊恼不晓得怎么去学,学习什么内容吗?那么多的技术书籍是否曾经让你无从下手?别急,这就附上一份残缺的Java学习门路。从头开始,给你一个体系化的学习计划。联合作者多年开发教训,倾心五年积淀,旨在与泛滥Javaer互相交换,共同进步。 《Java工程师成神之路(根底篇)》介绍了一般Java工程师必须要学习的相干知识点,包含面向对象和Java语言根底两大部分,涵盖根本数据类型、关键字、异样、I/O流、汇合、反射、泛型和枚举......另外,内附成神导图哦~ [收费下载《Java工程师成神之路(根底篇)》](https://developer.aliyun.com/... 对于作者:Hollis ,阿里巴巴技术专家,51CTO 专栏作家,CSDN 博客专家,掘金优良作者,《程序员的三门课》联结作者,《Java 工程师成神之路》系列文章作者;热衷于分享计算机编程相干技术,博文全网浏览量数千万。 目录 精彩节选Java如何实现的平台无关性的置信对于很多Java开发来说,在刚刚接触Java语言的时候,就据说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言能够迅速崛起并景色有限的一个重要起因。那么,到底什么是平台无关性?Java又是如何实现平台无关性的呢?本文就来简略介绍一下。 什么是平台无关性平台无关性就是一种语言在计算机上的运行不受平台的束缚,一次编译,到处执行(Write Once ,Run Anywhere)。 也就是说,用Java创立的可执行二进制程序,可能不加扭转的运行于多个平台。 平台无关性益处作为一门平台无关性语言,无论是在本身倒退,还是对开发者的友好度上都是很突出的。 因为其平台无关性,所以Java程序能够运行在各种各样的设施上,尤其是一些嵌入式设施,如打印机、扫描仪、传真机等。随着5G时代的降临,也会有更多的终端接入网络,置信平台无关性的Java也能做出一些奉献。 对于Java开发者来说,Java缩小了开发和部署到多个平台的老本和工夫。真正的做到一次编译,到处运行。 平台无关性的实现对于Java的平台无关性的反对,就像对安全性和网络移动性的反对一样,是散布在整个Java体系结构中的。其中扮演者重要的角色的有Java语言标准、Class文件、Java虚拟机(JVM)等。 编译原理根底讲到Java语言标准、Class文件、Java虚拟机就不得不提Java到底是是如何运行起来的。 咱们在Java代码的编译与反编译那些事儿中介绍过,在计算机世界中,计算机只意识0和1,所以,真正被计算机执行的其实是由0和1组成的二进制文件。 然而,咱们日常开发应用的C、C++、Java、Python等都属于高级语言,而非二进制语言。所以,想要让计算机意识咱们写进去的Java代码,那就须要把他"翻译"成由0和1组成的二进制文件。这个过程就叫做编译。负责这一过程的解决的工具叫做编译器...... 原文链接本文为阿里云原创内容,未经容许不得转载。

October 23, 2020 · 1 min · jiezi

关于npm:MQTT在游戏运营发行中的实践

前言在游戏生态中,次要蕴含游戏的研发方以及经营发行方。一款游戏的运行,分为研发和经营两个阶段。研发的主体有集体、独立工作室、游戏研发公司等; 游戏的研发主体专一于游戏内容的研发,对游戏的发行及经营往往在人力、财力上投入有余,促使游戏发行及经营业务应运而生,产生了独立的经营发行方。目前市场上很多大型游戏厂商将本人的发行及经营能力打包给经营发行方。另外还有一些游戏的散发渠道方,依靠于本人的流量劣势,也提供仅针对本渠道的联结经营服务。上图中无关的交互的局部: l 游戏自身的操控交互是在游戏客户端与游戏服务端间进行的,大部分会采纳Socket长链接的形式进行通信。l 游戏客户端与游戏发行方平台的交互,包含登录,领取等等,这些由游戏玩家被动申请的会采纳http的形式进行链接通信。这两局部的交互选型绝对固定。但在经营发行方中对于经营音讯以及广告推送等场景,例如各类服务器运维降级等跑马灯信息;账号踢下线信息;悬浮窗广告;一般音讯推送等等服务更多是由游戏的经营发行方被动推送的。在百万级游戏客户的状况下,如何抉择更适宜的交互方式是一件头痛的事件。 咱们在本章中探讨如何更好地抉择经营发行音讯的技术实现。 经营发行方推送的特点与要求1.触达用户多:一款胜利的游戏总客户数常常超百万千万。同时在线数高。2.音讯的时效性不同:有些音讯是在某时间段内都失效的(例如主游戏服运维降级告诉),无论客户以后的状态是否在线,如果以后客户在线那么就立即收到,离线的客户在下次进入游戏时也会收到相应的音讯。有些音讯是对于以后在线的客户(例如账号踢下线信息)才有意义。3.精准的群发性诉求:推送的音讯都是对于具备某类特色的客户群体进行播送(例如不同的广告对应不同等级的游戏玩家)4.连贯的轻量级耗费:这类数据的交互比照游戏自身操控来说,频率较低,所以游戏客户端与广告经营等数据推送的流量占用的客户端运行资源尽可能的少。5. SDK依赖资源简洁:在游戏畛域里,由研发团队会产生游戏母包,而经营发行方会在母包的根底上嵌入经营所须要的SDK包,例如领取性能, 数据推送性能;那么对于推送性能自身所依赖的资源包就越小越好了。 备选的技术计划剖析1. http轮询计划: 长处:游戏客户端依赖起码,实现不便。毛病:有效轮询占比高:多个客户端,多品种的轮询多,鉴于本类音讯的频率不高,那么绝大部分轮询都是没有理论业务意义的。经营端实现简单:须要应用额定的代码逻辑专门保护已读取状态。资源占用高:周边配套的调用链,日志信息,并发解决能力这些推高了资源占用状况。 2. Socket计划: 长处:游戏客户端依赖比拟少,实现不便。毛病:连贯保护:经营方会有不同种类型的利用划分(例如广告可能是独自的利用,系统管理也会是另一独自的利用),如果都须要推送,那么就必须有不同的socket连贯到不同类型的利用;这样游戏客户端的连贯就会增多,从而占用比拟多的资源。经营端实现简单:须要应用额定的代码逻辑专门保护订阅推送类型,在推送过程中须要代码实现过滤,精准投递到目标群体; 为了保障推送的品质(达到与否),须要额定记录推送状态;对于推送数据的时效须要额定的管制,有些过期的音讯(例如服务运维工夫告诉)。 3. KAFKA计划: 长处:接入简略:成熟的消息中间件,反对各种实现语言。只须要对接Kafka 节点自身,不须要间接与发行方的利用进行连贯,人造解藕。功能强大: 推送数据的状态保护,存储等都能够借用Kafka的来提供。毛病:客户端连接数反对有余,无奈通过简略的集群来反对数量泛滥的游戏玩家(客户端)。 4. MQTT计划: 长处:接入简略,MQTT的协定十分简洁,反对各种实现语言。反对各种订阅关系。反对p2p音讯。反对各种音讯触达的QoS品质。可观测客户端的连贯状况。反对百万级的连贯。毛病:MQTT技术以后阶段不如其它计划公众。 MQTT技术计划通过比照,下面的三种计划, MQTT计划是十分合乎作为游戏的经营发行方与游戏客户端进行推送数据的交互场景。那么咱们来看看这个技术的设计准则。 1、轻量级与高效的微音讯,MQTT协定精简,音讯头特地简略; 2、基于公布/订阅(Pub/Sub)通信模式,能够进行双向通信;3、反对topic进行音讯存储落盘;4、反对订阅关系设定;反对p2p的模式与播送模式;5、反对百万级别的连贯设施;6、提供音讯服务质量治理;7、实用于低带宽、高提早、不稳固的网络;这里,咱们比拟一下阿里云的产品微音讯队列MQTT与开源MQTT。 结语在游戏公布经营平台中,应用阿里云微音讯队列MQTT产品能够满足经营平台与游戏客户端间的数据推送服务场景,即既保证了百万级连贯,又实现了资源占用少,也能做到各种简单的音讯数据公布订阅管控。 原文链接本文为阿里云原创内容,未经容许不得转载。

October 23, 2020 · 1 min · jiezi

关于npm:过Serverless技术降低微服务应用资源成本

前言在大型分布式IT架构畛域,微服务是一项必不可少的技术。从实质上来讲,微服务是一种架构格调,将一个大型的零碎拆分为多个领有独立生命周期的利用,利用之间采纳轻量级的通信机制进行通信。这些利用都是围绕具体业务进行构建,能够独立部署、独立迭代,也可能依据业务负载独立的程度扩大。微服务思维以及相干的技术为IT架构的倒退带来了一系列粗浅的改革:1、 易于开发和保护:一个利用只会关注一组特定的业务性能,通过服务拆分,能缩小利用之间的耦合度,让开发和保护更加简略。2、 技术栈不受限制:在微服务架构中,能够联合我的项目业务及团队的特点,正当的抉择技术栈。3、 放慢零碎演进速度:每一个利用都能够独立的进行版本更新,通过灰度公布等技术手段能确保公布过程中整个零碎稳固运行。4、 突破性能瓶颈:每个利用都能独立的程度伸缩,使零碎性能能够依据计算资源的减少而失去线性的扩大。 微服务的挑战世上没有收费的午餐,微服务技术让IT零碎变得更麻利、更强壮、更高性能的同时,也带来了架构复杂度的晋升。对于开发者而言,要想更好的驾驭微服务架构,须要解决继续集成、服务发现、利用通信、配置管理、流量防护等一系列难题。侥幸的是,针对这些普遍存在的难题,业界涌现了一系列优良的开源技术组件和工具,让开发者能够更轻松的构建微服务利用。像Spring Cloud和Dubbo这样的技术框架,通过多年的倒退,曾经演变为微服务畛域的通用规范,极大地升高了微服务的门槛,但这些技术框架仍然没有方法解决其中两个最大的挑战,这两个挑战成为摆在开发者背后的两座大山。 挑战一亟需欠缺的生命周期治理与服务治理计划:在一个频繁迭代的零碎中,每个利用会经常性面临新版本公布需要,须要对利用的上线、下线、更新、回滚等流程进行集中性的治理,并配合精密粒度的灰度公布伎俩,缩小版本迭代对业务造成的影响。在一个简略的微服务架构中,如果某利用处于整个链路的入口地位,它的前端个别会挂上负载平衡组件(上图中的利用A),以承接来自于最终用户的业务申请。这类利用在进行生命周期治理的时候,复杂度会更高,为了确保利用在新版本公布过程中的均衡稳固,会通过如下的步骤:在这个流程中,还没有波及到对于流量精密粒度管制的高级灰度计划,但曾经足够体现出其复杂性和操作难度了。如果仅仅依赖于简略的公布脚本进行治理,岂但效率很低,还很容易导致顾此失彼,对系统稳定性造成微小的危险。 挑战二亟需欠缺的程度扩容与缩容计划:当某一个利用的性能呈现瓶颈,须要通过减少实例数量来进行性能晋升的时候,就须要引入新的计算资源。新的计算资源从何而来呢? 对于线下IDC而言,计算资源是须要事后布局的,扩容并不是一件简略的事件,可能会因为各种条件的制约而导致扩容无奈实现。当然这种困扰在云计算时代不复存在了,为一个利用裁减计算资源是信手拈来的事件,但光有计算资源是不够的,还得在下面部署利用,并将利用包容到微服务体系中。依据这个流程,如果须要扩容一个利用实例,激进预计也须要20分钟以上,其中购买、零碎初始化、利用部署都须要占用大量的工夫。假如零碎流量突增,须要在2分钟之内紧急扩容,这个计划就无用武之地了。 一剂良药:容器化技术为了解决这两个难题,开发者们尝试了各种各样的计划,新的理念以及技术框架在过来的这五年层出不穷。在一轮轮的优胜劣汰下,以Docker为代表的容器技术,在Kubernetes生态的撑持下,在业界成为了支流,是构建云原生(Cloud Native)利用的必备因素。容器化相干技术可能更大程序的开掘云计算的价值,在肯定水平上帮忙开发者解决这两个难题。 在利用生命周期治理以及服务治理方面,Kubernetes提供了比较完善的实现机制,通过构建Deployment资源,配合proStop和postStart脚本,能比拟不便的实现滚动公布以及利用的优雅高低线。尽管在灰度公布的过程中,仍然没有方法间接对流量进行精密粒度管制(引入ServiceMesh技术能加强流量控制力,不在本文探讨范畴),但相比简略的公布脚本,曾经有了飞跃性的晋升。 在利用的程度扩容与缩容方面,通过容器化技术能够极大水平的缩小操作系统装置以及零碎级初始化的工夫,但购买虚拟机的操作是无奈防止的,所以在零碎遇到流量增突的时候,仍然没有方法实现疾速程度扩容。 咱们能够预留一部分计算资源,放在资源池中,当利用有扩容需要的时候,就向资源池申请资源,当业务负载降落的时候,再把多余的计算资源偿还到资源池中。 这其实并不是一个好主见,每一个计算资源都是须要老本的,资源池尽管可能解决计算资源疾速投入使用的问题,却造成了微小的节约。另外,到底布局多大的资源池,也是一件很伤脑筋的事件,池子越大,造成的节约就越大,但池子太小,又可能满足不了扩容的需要。 资源老本更深层次的剖析可能有的开发者会认为,目前的业务运行十分的稳固,在用户流量上并不存在显著的突增,所以扩容和缩容是一个伪需要,在未来也不会有这样的需要。这可能是对互联网业务的一种误会,因为齐全没有扩容需要的状况是不存在的。 首先,只有一个零碎是为人服务的,就必然存在波峰和波谷。对于一个7*24小时运行的零碎,不可能永远放弃同样的用户流量,二八准则对于很多业务零碎仍然实用(80%的用户流量集中在20%的时间段。即使是用户流量绝对均衡的零碎,在凌晨也存在流量的低谷,如果能更进一步的开释闲置计算资源,晋升资源利用率,就能显著的升高资源应用老本。另外,相比生产环境,开发和测试环境对于扩容和缩容的需要会更加迫切。一套微服务利用由不同的团队进行开发,在现实的状况下,多个团队会共享一套测试环境:然而,每个团队对于利用的迭代都会有本人的节奏,与此同时,他们又想领有独立的端到端测试环境,从而实现环境之间的隔离,以防止团队之间的相互影响。这样的话,很有可能会造成多套测试环境: 随着利用、团队、业务性能点数量的减少,所须要的开发测试环境数量还会成倍的增长,造成微小的资源节约。对于测试环境的计算资源而言,资源利用率要远低于生产环境。有的时候仅仅是一个简略性能点的验证,为了端对端的跑通业务性能,又防止团队之间的相互影响,就会开启一套包含全副微服务利用的新环境。这样的资源节约,对于很多企业,都是一个多年都未曾失去解决的难题。 因而,微服务架构在实质上就是对弹性伸缩有着强烈诉求的,在弹性伸缩的过程中,不论是单利用的程度弹性伸缩,还是整套环境的启停,资源利用率都对最终的资源老本起着决定性的作用。如果能想方法晋升资源利用率,就能为企业节俭大量资源老本。值得咱们器重的是,绝大多数的微服务利用的资源利用率都是非常低的。咱们能够做一个简略的统计:把所有服务器的CPU利用率每5分钟导出一次,依照天的维度求平均值,就能从整体上理解零碎的资源利用率数据。如果把开发测试环境的服务器资源也纳入统计的范畴,资源利用率很有可能会更低。 Serverless化摸索资源利用率低的根本原因,在于以服务器为载体的利用架构中,开发者须要将构建好的程序包部署到服务器上,从而对多个用户事件进行响应。为了确保事件响应的及时性,须要让程序长驻于服务器上,而且尽可能激进的布局资源,以避免出现负载过重而导致服务解体的状况。在这个过程中,理论的负载在工夫上调配并不平衡,从而导致整体的资源利用率偏低。 Serverless技术的呈现,为晋升资源利用率提供了新的思路。Serverless是一种构建和治理基于微服务架构的残缺流程,容许开发者脱离服务器资源而间接部署利用。它与传统架构的不同之处在于,齐全由第三方治理,由事件触发,存在于无状态(Stateless)的计算容器内。构建无服务器应用程序意味着开发者能够专一在产品代码上,而无须治理和操作服务器资源,真正做到了部署利用无需波及基础设施的建设。 Serverless技术存在多种状态,最典型的一种是FaaS(Function as a Service,函数即服务),比方阿里云的函数计算(Function Compute,FC)产品。在函数计算畛域,所有计算资源的申请和调度都由具体的业务事件触发,当业务事件所对应的工作实现之后,计算资源会被立刻开释。这样的形式真做到了计算资源的按需分配,能显著晋升资源利用率,是Serverless技术的终极状态。 另外一种是Serverless化的容器技术,Serverless化的容器实例运行在案例隔离的环境中,每个计算节点通过轻量级虚拟化平安沙箱技术齐全强隔离。对于使用者而言,无需购买服务器资源即可间接部署容器利用,也无需对集群进行节点保护和容量布局,能够依据利用配置的CPU和内存资源量进行按需付费。当微服务利用须要扩容的时候,就能够疾速取得计算资源,不须要再通过购买服务器这个步骤了,能够帮忙开发者升高计算成本,缩小闲置资源节约,平滑应答突发流量顶峰。阿里云的Serverless Kubernetes(ASK)就是Serverless化容器技术的代表产品。 更进一步挖掘开发者的诉求Serverless技术无缝是云计算和云原生利用架构的倒退方向,但对于微服务利用的开发者而言,不论是FaaS状态,还是Serverless Kubernetes,都存在肯定的局限性。 不是每一种业务都适宜通过FaaS的形式进行构建,特地是对于链路长,上下游依赖特地显著的利用,基本没有方法进行FaaS化革新。即使某些业务零碎的FaaS化革新被证实可行,把现有的微服务架构革新成FaaS架构也须要肯定的工作量,并不能做到无缝移植。 Serverless Kubernetes架构尽管能适配所有的业务场景,但对于开发者而言,构建一整套Kubernetes体系,须要把握一系列跟Kubernetes相干简单的概念,有着十分陡的学习曲线。而且Kubernetes生态中各种组件的搭建,再加上网络层与存储层的适配,都波及非常复杂的工作。 造成这种局限性的起因很简略,在以Spring Cloud为代表的微服务技术营垒中,零碎的构建都是围绕着利用(也能够了解为单个的服务)而开展,不论是版本更新还是程度扩大,都是针对利用自身。Serverless Kubernetes架构的外围在于Pod,比利用更偏差零碎底层,所以使用者须要投入更多的精力用于利用上层资源的治理。而FaaS架构的外围在于函数,比利用更偏差零碎下层,因而灵便度会升高,不能适配所有的业务场景。 对于应用支流Spring Cloud体系或Dubbo体系构建微服务利用的开发者而言,如果须要引入一种计划升高资源老本,他的最终诉求肯定蕴含两个方面: 1、 是否0革新老本,或者靠近0革新老本。2、 是否适配所有的业务场景。 应用层Serverless技术是否有一种介于FaaS和Serverless化容器之间的技术,能够实现上述重要诉求呢?当然有,这就是以阿里云Serverless利用引擎(SAE)为代表的应用层Serverless技术。 图:不同层级的Serverless技术 SAE实现了Serverless 架构 + 微服务架构的完满交融,对于Spring Cloud和Dubbo等支流的微服务架构,能够实现无缝兼容,基本上没有革新老本,并真正按需应用、按量计费,节俭闲置计算资源,同时免去 IaaS层运维方面的工作,无效晋升开发运维效率。 以Spring Cloud利用为例,如果须要部署一个新的利用,只须要2个步骤:1、 通知SAE这个利用须要多少个实例,并指定每个实例须要的CPU/内存规格。2、 上传利用的JAR包/WAR包,并启动利用。 咱们发现,这2个步骤中并不波及容量评估、服务器购买、操作系统装置、资源初始化等工作,就能让蕴含多个对等实例的微服务利用运行起来。这是因为在Serverless的世界中,不再具备服务器资源这样的概念,利用的载体是SAE调度进去的沙箱容器,每个实例只有在真正投入使用后,才会按应用时长进行计费。 对于开发者而言,他们不必关怀利用到底部署在物理机外面,还是虚拟机外面,或是容器外面,也不须要晓得底层的操作系统是什么版本的,只须要关注每个利用实例占据多少运算资源就能够了。如果利用须要从4个实例扩容到6个实例,或者缩容到2个实例,只须要一个指令就能够实现,甚至与SLB的绑定关系,都能够主动的建设或解除,这是Serverless技术为开发者带来的微小价值。 应用SAE部署微服务利用,因为只是变更了利用运行的载体,所以能够100%的兼容现有的技术架构和业务性能,迁徙老本能够忽略不计。 SAE的极致弹性能力除了手动的扩缩容指令,SAE还反对2种主动弹性机制,能够对微服务利用进行灵便的程度扩大,更进一步的施展云计算的弹性能力。 1、 定时弹性机制:对于会预期产生的周期性行为,能够设置定时弹性策略。举例:如果每天的上午9点是业务顶峰,能够定时每天8点半减少实例数量,并在9点半缩小实例数量。2、 基于指标阈值的弹性机制:对于超出预期的业务流量突增,能够设置基于指标阈值的弹性策略,依据CPU、内存等资源指标,以有QPS等业务指标让利用实现主动的弹性缩。 通过多种弹性机制,可能对系统容量进行精密粒度的治理,使资源的使用量能随着业务流量的变动而调整,从而极大水平的减少资源利用率,大幅升高资源老本。 在计算资源的调度和启动上,SAE做了多项优化,对于扩容进去的新实例,只须要几秒钟的工夫就能拉起,这项能力对于一些须要紧急疾速扩容的突发场景,是具备重大意义的。 对于开发测试环境而言,SAE的机制弹性能力能体现得更加酣畅淋漓,得益于SAE杰出的资源调度能力,能够一键启停一整套微服务利用。即使仅对一项简略的新性能进行冒烟测试,也齐全能够新启一套残缺而隔离的测试环境来进行。新的环境能够在秒级搭建实现,疾速投入使用,而测试结束后,又能够立刻开释。从老本上来讲,一套新环境理论投入使用的工夫很短,因而只会耗费极少的费用。这对于微服务利用开发过程中的多团队合作,是一个微小的改革。 老本剖析SAE通过资源的理论使用量来付费,费用由两局部组成,每局部依据统计后果和计算形式进行费用结算,按小时出账单扣款。每个利用应用的资源计量形式如下所示: ...

October 19, 2020 · 1 min · jiezi

关于npm:进击的数据中台企业数字化转型的新引擎

经验过“追捧”和“质疑”等种种考验后,以后,数据中台曾经走到验证其价值的要害路口。 数据中台是企业数字化转型新引擎在人工智能、大数据等技术倒退和企业数字化转型减速的双重驱动下,2019年,数据中台在泛滥赛道中怀才不遇,成为行业焦点。除了提供综合解决方案的行业元老阿里巴巴之外,专一于某一具体场景的中台服务商,以及转型中的CRM、ERP等企业也纷纷入场,市场竞争愈发强烈。 公众对数据中台、数据平台、数据仓库等概念的辨析与了解存在的偏差,肯定水平造成了对“数据中台”概念的质疑和误读。 那么,到底什么是数据中台?依据36氪研究院公布的《2020年中国服装行业数据中台钻研报告》(以下简称为“《报告》”),数据中台概念最早由阿里巴巴团体提出,是方法论、组织与工具的有机联合,是快、准、全、统、通的智能大数据体系。与数据仓库等传统数据工具相比,数据中台是一种新的理念,以“技术+业务”为双驱动,是企业发展新型经营的中枢系统。 图示:数据中台与数据仓库的区别 据《报告》钻研剖析,数据中台对优化企业组织构造与流程,晋升企业管理水平和组织麻利度具备较强推动作用。这是因为,数据中台突破了传统企业组织架构下IT和业务只能分属不同部门的藩篱,将业务与技术交融协同,省去业务数据跨部门传递步骤,同时将基于技术的数据分析后果间接转化为业务优化计划,如此一来,能够实现1+1>2的成果。 图示:数据中台赋能企业组织敏捷性 以后,随着数智化落地过程逐渐深刻,企业对数据价值开掘和深刻业务层的数据利用需要一劳永逸,数据中台解决方案也随之迭代降级。以阿里云数据中台为例,基于不同行业的数据个性和差异化的业务逻辑,阿里云数据中台正在从通用畛域走向精细化垂直畛域。 数据中台重塑服装行业价值链以服饰这一垂直行业为例,数据中台买通本来涣散的企业价值链各环节,基于强有力的数据,输入多元简单业务场景下的无效解决方案,推动企业数智化的切实落地。在新冠肺炎疫情阴云笼罩寰球的背景下,企业数智化转型更具现实意义,数智化水平高的企业往往领有趁势而为、戗风翻盘的高效应变能力。 然而数智化对于服装行业而言,却是一个稍显难堪的命题:最早试水,却涉“水”未深。服装企业较早地将数字化管理工具利用在客户、库存治理方面,海量经营数据散落在并未互通的数字零碎中,由此引发的数据孤岛效应减弱了数据反哺业务增长的能力,更无需言数据与企业组织及生态的联动。 此时,数据中台的价值便得以彰显。数据中台突破企业数据烟囱,实现数据的对立收集、贮存、计算、可视化出现。服装企业设计生产、库存、铺货、补货、清尾各环节均实现数据加持,扭转过来企业经营管理决策的"拍脑袋"、"靠教训"模式,"让数据谈话",推动人、货、场三要素的智能匹配。 图示:数据中台优化企业价值链 《报告》详述了数据中台赋能服装企业的五大利用场景: 新品孵化、供应链革新、全域营销、门店治理及渠道拓展,笼罩了服装企业的经营日常。 新品孵化:数据中台加持下,生产数据低时延传输至企业,造成全方位的市场画像,反对企业在新品孵化方面贴近消费者需要,缩短孵化周期,及时无效适应市场新需要,打造“爆款产品”。 供应链革新:数据中台将企业数据打造成数据资产,反哺供应链各环节。长久以来,产业链的库存环节与服装企业“相爱相杀”,企业须要弱小的库存来应答市场需求,然而稍有不慎产生的库存积压将形成企业难言之痛。数据中台疏导企业基于生产及市场数据,剖析、预测需要总量,“以需定产”,破解由库存积压导致的企业财务、治理难题,直击库存痛点。 全域营销:数据中台框架下,企业对生产群体实现更为粗疏的划分,针对不同细分群体及其生产特点,定制个性化营销计划,实现营销的精准触达,带动消费者的拉新、转化、促活与裂变。 门店治理:数据中台对门店的赋能成果体现在新店选址与门店智能化经营两方面。新店选址抓住消费者的“人”,智能门店抓住消费者的“心”,最终晋升门店坪效与人效。 渠道拓展:对服装企业而言,得渠道者得天下。渠道意味着流量与业务后劲。数据中台助力企业摸索线上渠道的同时买通线上线下数据,打造全渠道消费者增长闭环,借助精准全域营销,进步消费者的品牌粘性。 数据中台对服装企业的赋能场景,同样实用于业务逻辑类似的新批发行业,其利用价值在于使企业更懂市场,以数据资产驱动业务增长,打造企业外围竞争力。 市场探路者:阿里云数据中台数据中台赛道炽热的背地离不开阿里对数据中台的元老级奉献。作为这一行业的先行者和领路人,阿里云数据中台全面定义数据中台这一概念,将阿里团体外部中台实际的教训累积与各行业倒退特色有机联合,摸索出具备行业特色的数据中台建设门路。 以“OneData方法论”为内核+“Dataphin基座+Quick系列场景化”工具,再加上企业外部业务与IT职能交融下的组织治理新模式,形成阿里云数据中台输入计划的灵魂。 图示:阿里云数据中台外围产品矩阵 “OneData”方法论领导企业数据资产的构建与治理,打造松软的数据根底;Dataphin作为数据中台建设的基座,“Quick系列”产品则为数据与业务场景联合提供利用工具。“Quick系列”继续丰盛与迭代,为行业场景化提供更具针对性的领导。 值得一提的是,阿里云数据中台的外围产品之一——Quick BI,是中国惟一入选Gartner魔力象限的可视化剖析产品,阿里云弱小的底层技术积淀不容小觑。 与行业其余玩家相比,阿里云数据中台推动企业生态与阿里团体生态联动,实现360°全域数据整合,成为企业可继续倒退的无力引擎。 只管数据中台行业处于倒退初期,渗透率有待晋升,质疑与激励声音并存,但在风起云涌、疾速倒退迭代的市场竞争环境中,数据中台赋能企业的价值日益凸显,行业拐点将至,将来可期。 原文链接本文为阿里云原创内容,未经容许不得转载。

October 16, 2020 · 1 min · jiezi

关于npm:阿里云DNS-新增云上线路的智能解析功能

简介: 企业在云上部署单元化架构或外部服务链路时,须要思考让数据(单元)离用户更近,防止跨单元获取数据,以此来满足本身低延时的诉求。阿里云DNS 新增基于云上链路的调度性能,进一步优化DNS智能解析,给云上用户提供更精准的流量调度能力。 传统解析 VS 智能解析咱们晓得,传统DNS解析形式,无需判断访问者起源,会随机抉择其中一个IP地址返回给访问者。然而,这样的形式,曾经不能满足现今互联网用户的拜访需要。因而,DNS智能解析应运而生。 阿里云DNS采纳的就是智能解析形式,它能够通过判断访问者的起源,为不同的访问者智能返回不同的IP地址,将申请调度到离用户最近的服务器节点,可能缩小解析时延,达到晋升网站访问速度的效用。 线路丰盛、流量调度精准的阿里云DNS智能解析性能,就可能帮忙云上用户实现就近接入。同时,智能解析还实用于以下场景: 境内跨运营商或跨地区拜访场景:企业的线上应用服务,大多数都会应用多个运营商IP地址,通过DNS智能解析的配置来实现用户的就近拜访。寰球业务智能拜访场景:企业如果是发展寰球业务,个别为了实现寰球用户都能取得较好的拜访品质,通常会在中国和海内别离部署应用服务,通过智能解析的配置,企业能够实现将用户拜访别离路由至海内或境内的接入点。通过智能解析限度某运营商或地区的访问者进行拜访:一部分企业因某些起因,会冀望限度境外的访问者拜访企业的应用服务,那么则能够通过配置智能解析,来实现屏蔽境外访问者的拜访诉求。智能解析-新增“阿里云”线路在云下丰盛的运营商网络线路根底上(比方 中国联通/中国电信/中国移动/中国教育网/鹏博士等),为了可能给云上的用户提供更精准的流量调度能力,阿里云DNS智能解析性能新增了“阿里云”线路,推出基于阿里云Region链路的流量调度计划。 新增的“阿里云”线路为企业用户提供更精密粒度、更精准的基于阿里云Region内的流量调度解决方案,反对云上用户实现依照Region就近接入,以及实现依照Region维度对阿里云进口的拜访流量进行调度调配,可能针对不同Region的访问者,返回指定的IP地址,使云用户疾速连贯云资源,实现升高解析提早与流量调度。 此次新增的“阿里云”线路,如下:华北1 (青岛)、华北2 (北京)、华北3 (张家口)、华北5 (呼和浩特)、华东1 (杭州)、华东2 (上海)、华北6(乌兰察布)、华南1 (深圳)、华南2 (河源)、华南3 (广州)、东北1(成都)、中国(香港)新加坡、澳大利亚(悉尼)、马来西亚(吉隆坡)、印度尼西亚(雅加达)、日本(东京)、德国(法兰克福)、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)、印度(孟买)、中东东部1(迪拜) 用户能够通过配置DNS记录的“解析线路”来抉择阿里云的region线路(图1):图 1 配置阿里云 华东1(杭州)解析线路 新增“阿里云”线路前后,成果比照咱们能够通过两张比照图,来看一下新增的“阿里云”线路所起到的作用。图 2 新增“阿里云”线路-前 上图中,是新增“阿里云”线路之前的解析过程。咱们能够看到: 在这种状况下,依据用户所在运营商或区域创立流量调度规定,咱们将图中的电信北京用户的流量同时指向阿里云华北2(北京)和电信(IDC北京)的IP,即50%的流量调度到阿里云华北2(北京)线路,另外50%调度到电信(IDC北京)线路。在此场景下,阿里云DNS未提供“阿里云”线路时,无奈精确地将阿里云上用户的DNS申请,精准调度到阿里云华北2(北京)的IP上,阿里云北京用户的流量,只能被调度到默认线路,即联通(IDC北京)上,这样对于阿里云北京的用户,无奈实现就近接入。图 3 新增“阿里云”线路-后 这张图中,是新增“阿里云”线路之后的解析过程。咱们能够发现: 推出流量调度计划后,云上用户能够被精准调度到其对应的区域线路上(比方阿里云北京用户,能够精准调度到阿里云_华北2(北京)线路),此时的电信北京用户,也齐全调度到电信_北京线路上,这样就实现了依照Region就近接入,更大程度地防止了调度跨区景象的产生。基于Region的流量调度计划的劣势由此可见,更加丰盛的线路,实现了Region维度的流量精准调度,从而解决解析提早、拜访速度慢等问题。同时,流量调度计划具备如下劣势: 流量拆分更精密,可能精密到对阿里云进口流量做流量调配,实现云上用户的就近接入。流量调度更精准,可能实现阿里云Region内的流量闭环,便于企业构建单元化架构。流量拜访低时延,可能避免出现跨Region跨网拜访,实现云上用户拜访减速。原文链接本文为阿里云原创内容,未经容许不得转载。

October 16, 2020 · 1 min · jiezi

关于npm:随时随地查看业务数据DataV移动端新功能上新

简介: 随时随地监控业务数据,及时对焦管理策略,让数据推动业务。 在有手机就能活的明天,还只在电脑背后看报表吗? BOSS们每天解决有数的音讯和邮件,还要四处奔波散会,没有方法时时刻刻在电脑前关注企业的经营数据。想随时随地查看企业数据,DataV的挪动端理解一下,开箱即用的挪动端可视化解决方案,满足你的各种可视化需要。 其实DataV之前就有出过挪动端的模板,只是暗藏在海量模板中没有那么显著,所以还有好多人不晓得DataV之前就能够做挪动端的大屏。然而之前的挪动端还比拟高级,编辑上也是十分不不便,不能适配分辨率,如果要做个正经的挪动端大屏,还得手把手的来调整,现在的手机更新迭代更是频繁的不要不要的,这个分辨率也是重口难调。让咱们来看看全新的挪动端画布编辑器有什么性能吧! 独立的编辑器挪动端画布编辑器是独立的,与PC端大屏的编辑器是离开的,不必再像以前一样在大堆的PC端模板中推着眼镜寻找了。 适配挪动端的视觉效果配套挪动端模板与组件,还可通过智能主题性能,对挪动端可视化利用进行正当的配色,完满反对 H5 环境。必定会有好奇宝宝会问到:那我想用PC端的组件怎么办?Of course,PC端的组件当然能够应用在挪动端。丰盛的图表性能组件,满足各种性能需要,可笼罩各类场景。 PC端一键转移挪动端咱们也始终在思考怎么样把PC端的一些设计理念“移植”到挪动端?实现PC端与挪动端的资源互联互通,从而做到“一次设计,任意部署”,轻松实现一表多屏。所以就有了一键转移挪动端的性能,能够将曾经做好的PC端可视化利用内容一键智能排布成挪动端展现的款式,方便使用手机或其余挪动端查看以后制作实现的可视化利用。 更灵便的编辑能力绝对PC端,挪动端屏幕展现的区域更具局限性,整个页面布局须要思考挪动端浏览的舒适性,所以在编辑时画布的灵便设置至关重要。DataV挪动端画布编辑提供流式布局画布配置和布局容器,可自在治理流式布局画布和各个组件。更有辅助线、图层搜寻框等工具栏,可分明各个容器的地位,编辑时对进步视觉美感提供帮忙。即使是非专业人员也可轻松搭建高水准可视化利用.整个挪动端还是秉承着DataV的定位:“帮忙非专业的工程师通过图形化的界面轻松搭建业余水准的可视化利用。”更是解决了领导出差近程查看数据不便的问题,进步管理决策效率,及时对经营情况做出反馈。为平台用户也是提供了更为灵便便捷的服务。 原文链接本文为阿里云原创内容,未经容许不得转载。

October 13, 2020 · 1 min · jiezi

关于npm:NPM使用规则

1、NPM版本号应用NPM下载和公布代码时都会接触到版本号。NPM应用语义版本号来治理代码,这里简略介绍一下。 语义版本号分为X.Y.Z三位,别离代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下准则更新。 如果只是修复bug,须要更新Z位。如果是新增了性能,然而向下兼容,须要更新Y位。如果有大变动,向下不兼容,须要更新X位。版本号有了这个保障后,在申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范畴的版本号。例如"argv": "0.0.x"示意依赖于0.0.x系列的最新版argv。

October 12, 2020 · 1 min · jiezi

关于npm:如何正确使用淘宝npm镜像

当我在一个农村的小镇上,用的是挪动宽带,用npm去拉载一些依赖时,常常抛出 info There appears to be trouble with your network connection. Retrying... //你的网络连接仿佛有问题,在重试…哪怕我开了网络代理,也会呈现, 装置一个依赖十分麻烦,这时才想到用淘宝镜像代理 长期应用npm --registry https://registry.npm.taobao.org install express永恒应用npm config set registry https://registry.npm.taobao.org配置CNPM这样的话,你用npm走的还是官网的,cnpm走的代理 npm install -g cnpm --registry=https://registry.npm.taobao.org复原应用npm config set registry https://registry.npmjs.org验证是否设置胜利npm info expressornpm config get registry NPM相干命令整顿 npm 罕用的一些命令,不便查看继续更新npm你能够通过上面的命令显示npm以后的版本: npm -v如果有须要,能够通过上面的命令更新npm: npm install -g npm当 Node 的主版本 released 之后,你也可能须要从新构建 C++ 扩大: npm rebuild如果你须要治理多个版本的node.js和npm,能够思考应用 n 或者 nvm,https://www.sitepoint.com/quick-tip-multiple-versions-node-nvm/,我举荐大家应用nvm去治理node.js版本 卸载如需删除 node_modules 目录上面的包(package),请执行: npm uninstall <package>: npm uninstall lodash如需从 package.json 文件中删除依赖,须要在命令后增加参数 --save: ...

October 7, 2020 · 2 min · jiezi

关于npm:npm-常用命令

npm 罕用指令npm 材料1. npm 官网注册账号:[npm 官网](https://www.npmjs.com/)2. 中文网站1:[中文网站](https://cloud.tencent.com/developer/section/1490282)2. 中文网站2:[官网中文网站](https://www.npmjs.cn/)发包根底流程1. npm login (=npm adduser): 须要输出 npm 用户名, 明码 和 邮箱, 按提醒即可2. npm version patch(minor/major): 降级补丁版本(小、大版本)3. npm pushlish: 公布, 如果不胜利请改下版本号4. npm unpublish moduleName@versionNum: 删除模块镜像1. npm config get registry:查看以后仓库源2. npm config list: 查看 npm 配置信息3. npm config set registry=url: 设置 镜像, 默认源(url=http://registry.npmjs.org) 淘宝镜像,registry=https://registry.npm.taobao.org4. npm install -g cnpm --registry=https://registry.npm.taobao.org:设置淘宝镜像5. npm --registry https://registry.npm.taobao.org install moudleName: 长期镜像包治理1. npm install -g moduleName:全局安装包2. npm install moduleName: 以后我的项目模块3. npm list -g --depth num: 查看全局装置过的模块 Num 示意列出模块目录的深度, 0 示意第一级目录4. npm list --depth num: 列出部分装置的模块5. npm uninstall -g moduleName: 卸载全局装置的模块6. npm uninstall moduleName:卸载部分装置的模块7. npm config get cache: 查看缓存位8. npm config get prefix:npm全局node包地位,(npm root -g)9. npm config set prefix <new_path>: 设置指定装置模块地位10. npm config set cache <new_path>:设置缓存地位11. npm cache clear --force:清缓存

October 2, 2020 · 1 min · jiezi

关于npm:浏览器标签页之间通信之-LocalstorageIndexedDB

举荐一个最近写的工具 @lllllxt/storage-idb-message,用于同源下浏览器标签之间的通信, 相比纯用Localstorage做通信,这个插件能够传递更大的数据。 文档:storage-idb-message基于 LocalStorage + IndexedDB 封装的消息传递的模块,在同源(不跨域)的前提下,用于同一页面多个 iframe、跨 tab 页面、挪动端不同 webview 页面之间的消息传递做这玩意的初衷原本我是只用 LocalStorage 做消息传递的, 但起初某次在 Chrome 上传递的数据>5M 导致数据失落,于是乎就有了用 LocalStorage 做指令,IndexedDB 做数据存储这个想法了 参考: LocalStorage 贮存空间在 2.5MB 到 10MB 之间(各家浏览器不同),而 IndexedDB 比 LocalStorage 大得多,一般来说不少于 250MB,甚至没有下限。 通过 npm 装置npm i @lllllxt/storage-idb-messageimport StorageIdbMessage from '@lllllxt/storage-idb-message'const StorageIdbMessage = request('@lllllxt/storage-idb-message')const _SIM = new StorageIdbMessage(opts: Opts)// 监听指令_SIM.response = (orderName, data) => { console.log(orderName, data)})// 发送指令_SIM.send(YourOrder, AnyData)通过<script>标签援用storage-idb-message.min.js 此办法是向 window 对象中注册一个 StorageIdbMessage 对象 参数(Opts)参数形容storageKey指令的 LocalStorage key 名称clearIdb默认 true,是否在 response 后革除 IndexedDB 的数据force默认 false,调用 clearCache 革除缓存办法办法形容send(order: String, data: any)发送response(order: String, data: any)响应其余页面传过来的指令静态方法办法形容clearCache(successFn?: Function, errFn?: Function)革除 indexedDB 缓存BTW ------------------------------------因为开发初衷是为了在vue工程上应用, 于是同时也写了基于这个工具开发的vue插件 @lllllxt/vue-storage-idb-message ...

September 27, 2020 · 1 min · jiezi

关于npm:npm报错-openssl-config-failed-fopenno-such-process

谬误openssl config failed: error:02001003:system library:fopen:no such process重新安装opensslhttps://slproweb.com/products... 配置环境变量OPENSSL_CONF=装置目录binopenssl.cfg重启

September 22, 2020 · 1 min · jiezi

关于npm:Apidoc生成接口文档PHP

一开始应用PHPDocumentor生成接口文档,然而,感觉有点不够不便,后换成了apidoc. 装置npm install apidoc -g或者应用yarn装置 yarn global add apidoc配置(apidoc.json)每次导出接口文档都必须要让apidoc读取到apidoc.json文件(如果未增加配置文件,导出报错),你能够在你我的项目的根目录下增加apidoc.json文件,这个文件次要蕴含一些我的项目的形容信息,比方题目、简短的形容、版本等,你也能够退出一些可选的配置项,比方页眉、页脚、模板等。apidoc.json { "name": "零碎接口文档", "version": "0.0.1", "description": "文档总形容", "title": "apidoc浏览器自定义题目", "url" : "文档url地址"}我的--order排序 { "name": "平安质量检查ServiceAPIs", "version": "1.0.0", "description": "平安质量检查接口文档", "title": "API接口文档", "url": "http://safety.local:8889", "sampleUrl": "http://safety.local:8889", "order": [ "根底接口", "myWorkbench", "查看流动", "getActivity", "getActivityInfo", "addActivityFile", "getRectify", "getInfoList", "handleActivity", "searchAccount" ]}示例: /** * @api {GET} /api.php?m=check&a=getActivity 查看所有查看流动列表 * @apiName getActivity * @apiGroup 查看流动 * @apiDescription 查看流动列表 * * @apiParam {String} token="s2iph9ik" 用户token * @apiParam {Number} adminid=3 用户id * @apiParam {Number=0,1,2,3,4} [type=0] 流动性质 0默认 1专项查看 2综合查看 3月度查看 4季度查看 * @apiParam {Number=0,1,2,3} [status=0] 查看活动状态 0未开始 1进行中 2已实现 3已勾销 * @apiParam {Number} [page=1] 页数 * @apiParam {Number} [num=10] 每页展现数量 * * @apiSuccess {Number} code 返回信息码 200 示意申请胜利 * @apiSuccess {String} msg 返回阐明信息 * @apiSuccess {boolen} success 申请胜利 * @apiSuccess {json} data 胜利数据 * @apiSuccess {Number} activity_record_num 问题记录数量 * * @apiSuccessExample Success-Response: * HTTP/1.1 200 OK * * { * "code": 200, * "msg": "", * "data": [{ * "id": "6", * "title": "2020年第二季度综合查看", * "property": "专项查看", * "check_project": "", * "dept": "xxxx部", * "check_range": "xx标段,xx标段", * "check_status": "0", * "start_time": "2020-08-19", * "end_time": "2020-08-31", * "add_time": "2020-09-01 09:00:49", * "summary": "查看查看", * "remark": "", * "file": "17", * "check_name": "bim", * "check_id": "13", * "check_phone": "17611241011", * "uid": "3", * "issue_status": "已整改回复", * "file_info": [{ * "filename": "创优网上填报零碎.docx", * "filepath": "upload/2020-05/22_12131327.docx" * }], * "activity_record_num": 2 * }], * "success": true * } * * @apiSampleRequest /api.php?m=check&a=getActivity */成果: ...

September 21, 2020 · 2 min · jiezi

关于npm:Npm依赖版本变动引发的惨案

来了新共事,拉同一个我的项目到本地装置依赖之后跑不起来,然而其余三台电脑运行着都没问题。接下来就是逐渐定位问题,首先排除了代码问题,因为最新代码在其余共事不同零碎的电脑上都没失常运行,进过百度/谷歌/github issue搜寻报错、重复从新拉我的项目、重启电脑、重装环境、重装系统等一天的的操作之后,终于定位到大略是依赖包版本更新的问题。。 我的项目里一共有60+依赖,次要的几个依赖都是手动锁死版本的,但有个lozad没有锁死,而且前段时间应该是公布了次版本更新,跟nuxt的兼容有问题所以报了错。跟运行失常我的项目的node_moduels中lozad版本比照,改了之后果然我的项目就跑起来了。 npm包治理原理在思考解决方案前,首先理解下npm包治理及依赖版本治理的原理。这些都是通过package.json文件实现的 当你应用npm装置一个包(并保留它)或者更新一个包的时候,package.json里就主动增加了一条信息,包含包名和其版本。npm默认装置最新版本,而后在其版本号之前增加一个^符号。比方^1.2.12,它表明最低应应用1.2.12版本。并且在这之上,领有雷同大版本号的任何版本都是OK的。毕竟小版本和bugfix版本不会对应用造成任何影响,所以用任何雷同大版本的更高级版本都很平安。 符号^:示意主版本固定的状况下,可更新最新版。例如:vuex: "^3.1.3",3.1.3及其以上的3.x.x都是满足的。符号~:示意次版本固定的状况下,可更新最新版。如:vuex: "~3.1.3",3.1.3及其以上的3.1.x都是满足的。无符号:无符号示意固定版本号,例如:vuex: "3.1.3",此时肯定是装置3.1.3版本。举例:"^1.2.3": 大于等于 1.2.3 且小于 2.0.0版本"^0.3.4": 大于等于 0.3.4 且小于 0.4.0版本"^0.0.6": 大于等于 0.0.6 且小于 0.0.7版本版本依赖为什么须要锁定没有版本锁定的状况下,在执行每次npm i的时候,对应的版本前都有个 ^ 符号。也就是未固定版本的依赖如果有了次版本更新或者订正版本更新,会主动装置对应的最新版。 在这种状况下,你再次install时装置的包的版本可能与前次不一样,具体的,你能够到package-lock.json中查看理论的包版本。 例如:A新建了一个我的项目,生成了下面这份package.json文件,但A装置依赖的工夫比拟早,此时packageA的最新版本是2.1.0,该版本与代码兼容,没有呈现bug。起初B克隆了A的我的项目,在装置依赖时packageA的最新版本是2.2.0,那么依据语义npm会去装置2.2.0的版本,但2.2.0版本的API可能产生了改变,导致代码呈现bug。 这就是package.json会带来的问题,同一份package.json在不同的工夫和环境下装置会产生不同的后果。 实践上这个问题是不应该呈现的,因为npm作为开源世界的一部分,也遵循一个公布准则:雷同大版本号下的新版本应该兼容旧版本。即2.1.0降级到2.2.0时API不应该发生变化。但很多开源库的开发者并没有严格遵守这个公布准则,导致了下面的这个问题。 为了在不同的环境下生成雷同的node_modules,引入版本依赖锁定就尤为必要了。 npm5.0之前能够通过npmshrinkwrap实现。通过运行 npm shrinkwrap,会在当前目录下生成一个 npm-shrinkwrap.json文件,外面蕴含了通过以后 node_modules 计算出的模块的依赖树及版本。只有目录下有 npm-shrinkwrap.json ,则运行 npm install 的时候会优先应用 npm-shrinkwrap.json 进行装置,没有则应用 package.json 进行装置。 在npm5.0之后,npm自带了package-lock.json文件,通过npm装置依赖,每当node_modules目录或者package.json发生变化时就会生成或者更新这个文件。不同版本有有些不同: npm 5.0.x版本:不论package.json中依赖是否有更新,npm i都会依据package-lock.json下载。针对这种装置策略,有人提出了这个issue - #16866 ,而后就演变成了5.1.0版本后的规定。5.1.0版本后:当package.json中的依赖项有新版本时,npm install会忽视package-lock.json去下载新版本的依赖项并且更新package-lock.json。针对这种装置策略,又有人提出了一个issue - #17979,参考 npm 贡献者 iarna 的评论,得出5.4.2版本后的规定。5.4.2版本后:如果只有一个package.json文件,运行npm i会依据它生成一个package-lock.json文件,这个文件相当于本次install的一个快照,它不仅记录了package.json指明的间接依赖的版本,也记录了间接依赖的版本。 如果package.json的semver-range version和package-lock.json中版本兼容(package-lock.json版本在package.json指定的版本范畴内),即便此时package.json中有新的版本,执行npm i也还是会依据package-lock.json下载 - 实际场景1。 如果手动批改了package.json的version ranges,且和package-lock.json中版本不兼容,那么执行npm i时package-lock.json将会更新到兼容package.json的版本 - 实际场景2。 ...

September 19, 2020 · 1 min · jiezi

关于npm:npm-i-S-D-g的区别

1)npm -i == npm install2)写入dependcies,公布到开发环境npm install module_name --save == npm i module_name -S3)写入devDependcies,生产环境npm install module_name --save-dev == npm i module_name -D4)全局装置npm i module_name -g || npm install module_name -g 5)本地装置(将包放在./node_modules)npm i module_name || npm install module_namenpm i -S -D -g的区别

September 18, 2020 · 1 min · jiezi

关于npm:Lerna-多包存储管理工具一

lerna最近在看vue-cli的源码局部,留神到这一个仓库下保护了多个package,很好奇他是如何在一个repo中治理这些package的。 咱们组当初也在应用组件库的形式保护我的项目间共用的业务代码。有两个组件库,存在依赖的关系,目前联调是通过npm link的形式,性能并不好,时常呈现卡顿的问题。加上前一段时间组内分享vue3也提到了lerna,于是便决定认真的调研一下这个工具,为接下里的组件库优化助力。 lerna的文档还是很具体的,因为全是英文的,思考到浏览问题,这里我先是本人跑了几个demo,而后做了中文翻译。后续我会出一篇专门的lerna实战篇 demo lerna 是干什么的?Lerna 是一个工具,它优化了应用 git 和 npm 治理多包存储库的工作流。 背景1.将一个大的 package 宰割成一些小的 packcage 便于分享,调试 2.在多个 git 仓库中更改容易变得凌乱且难以跟踪 3.在多个 git 仓库中保护测试繁琐 两种工作模式Fixed/Locked mode (default)vue,babel 都是用这种,在 publish 的时候,所有的包版本都会更新,并且包的版本都是统一的,版本号保护在 lerna.jon 的 version 中 Independent modelerna init --independent 独立模式,每个 package 都能够有本人的版本号。版本号保护在各自 package.json 的 version 中。每次公布前都会提醒曾经更改的包,以及倡议的版本号或者自定义版本号。这种形式绝对第一种来说,更灵便 初始化我的项目npm install -g lerna // 这里是全局装置,也能够装置为我的项目开发依赖,应用全局不便前期应用命令行mkdir lerna-repocd lerna-repolerna init // 初始化一个lerna我的项目构造,如果心愿各个包应用独自版本号能够加 -i | --independent 规范的 lerna 目录构造每个独自的包下都有一个 package.json 文件如果包名是带 scope 的,例如@test/lerna,package.json 中,必须配置"publishConfig": {"access": "public"}my-lerna-repo/ package.json lerna.json LICENSE packages/ package-1/ package.json package-2/ package.json启用 yarn Workspaces (强烈建议)Workspaces can only be enabled in private projects. ...

September 9, 2020 · 11 min · jiezi

关于npm:SpringCloud-应用在-Kubernetes-上的最佳实践-高可用熔断

前言阿里巴巴十多年的双十一,锻炼进去了一套业界当先的高可用技术,有一些曾经商业化(云产品 PTS、AHAS),也有的开源了如:Sentinel、ChaosBlade。咱们这一系列的高可用章节也次要介绍这方面的内容。明天介绍熔断局部,即开源产品 Sentinel 的外围能力。 问题定义在一个常见的分布式应用中,一个申请先通过终端达到 Gateway,再通过防火墙和网络负载平衡,其中还包含调用上游的其它服务和第三方利用,能力达到前端网络服务;如下图所示。 和这样一个架构一样,大家可能也会遇到如下的一些相熟的 Case : 霎时洪峰流量导致系统超出最大负载,load 飙高,零碎解体导致无奈失常提供服务。“黑马”热点数据击穿缓存,DB 被打垮,挤占失常流量。调用端被不稳固服务拖垮,线程池被占满,导致整个调用链路卡死甚至零碎雪崩......这些不稳固的场景可能会导致严重后果。大家可能想问:如何做到平均平滑的用户拜访?如何预防流量过大或服务不稳固带来的影响?这时候咱们就要请出微服务稳定性的法宝 —— 高可用流量防护,其中重要的伎俩就是流量管制和熔断降级,它们是保障整个零碎稳定性重要的一环。 流量管制流量是十分随机性的、不可预测的。前一秒可能还惊涛骇浪,后一秒可能就呈现流量洪峰了(例如双十一零点的场景)。然而咱们零碎的容量总是无限的,如果忽然而来的流量超过了零碎的承受能力,就可能会导致申请解决不过去,沉积的申请解决迟缓,CPU/Load 飙高,最初导致系统解体。因而,咱们须要针对这种突发的流量来进行限度,在尽可能解决申请的同时来保障服务不被打垮,这就是流量管制。 熔断降级一个服务经常会调用别的模块,可能是另外的一个近程服务、数据库,或者第三方 API 等。例如,领取的时候,可能须要近程调用银联提供的 API;查问某个商品的价格,可能须要进行数据库查问。然而,这个被依赖服务的稳定性是不能保障的。如果依赖的服务呈现了不稳固的状况,申请的响应工夫变长,那么调用服务的办法的响应工夫也会变长,线程会产生沉积,最终可能耗尽业务本身的线程池,服务自身也变得不可用。 Spring Cloud 中如何做熔断?在原来的 Spring Cloud 产品族中,有自带的熔断组件 Hystrix ,是 Netflix 公司提供的一个开源的组件,提供了熔断、隔离、降级的这些个性,不过 Hystrix 在 2018 年 11 月份开始,就不再迭代开发,进入保护的模式。不过好消息是也就是这一年开源了 Spring Cloud for Alibaba 产品族,其中的 Sentinel 完满的对 Hystrix 做了补充,上面针对 Sentinel 做一些根本介绍。 Sentinel 工作原理?Sentinel 以资源流量(URL、线程、本地函数、Dubbo服务等)为切入点,依据用户输出的规定,自适应的做到流量管制、熔断降级、零碎负载爱护等多个维度,全方位的保障系统的稳定性。并提供了一套具备丰盛的利用场景、齐备的实时监控、宽泛的开源生态、欠缺灵便的 SPI 扩大点的完满的高可用解决方案产品,一个根本的原理介绍图如下,具体介绍请参考官网文档。 在应用上,针对支流框架默认提供主动适配的能力来定义须要爱护的资源,并提供设施对资源进行实时统计和调用链路剖析。同时,Sentinel 也提供凋谢的接口,不便您自定义并扭转规定。 疾速应用 Sentinel 的形式除了在开源提供的计划之外,Sentinel 曾经以多种状态进入到了各种云产品的组合解决方案中,列举如下: 一、在 AHAS 中应用Sentinel 当初曾经是阿里云云产品 AHAS 的重要能力,应用形式请参考官网文档,相比开源的形式接入,云产品次要省去了繁琐的配置,提供了更快的接入形式,以及更敌对的产品管控界面,以及更弱小的能力;当然除此之外,最重要的是在接入和运行的过程中,都能够取得原厂同学的间接的反对。 ...

August 26, 2020 · 1 min · jiezi

关于npm:Npm-上传攻略-菜鸟版

前言截止本文公布时——2020-08-13,作者也是刚学会npm如何公布本人的代码,期间走了很多弯路——即便网上有很多教程,具体起因在此略过,发表此文的初衷是心愿帮忙和我一样的初学者学会如何公布到npm,能力无限,有谬误欢送提出! 注释作者技术栈为Vue、Typescript —— 均为初学,包管理工具为Yarn —— 不分明的请百度创立我的项目全局装置Vue-cli脚手架yarn global add @vue/cli创立我的项目(具体流程略过)vue create npm-demo 创立Loading组件components └─ Loading index.ts loading.vueindex.ts //先引入loading组件import LoadingComponent from './loading.vue'const Loading: any = {}Loading.install = function (Vue: any) { // 生成一个Vue的子类 同时这个子类也就是组件 const ToastConstructor = Vue.extend(LoadingComponent) // 生成一个该子类的实例 const instance = new ToastConstructor() // 将这个实例挂载在我创立的div上 // 并将此div退出全局挂载点外部 instance.$mount(document.createElement('div')) document.body.appendChild(instance.$el) //注入vue的原型链 Vue.prototype.$loading = { show() { instance.show = true }, close() { instance.show = false } }}export default Loadingloading.vue ...

August 13, 2020 · 2 min · jiezi

关于npm:node-yarn-git-安装及配置

此文仅仅用来记录换电脑时根本开发环境装置,VSCode局部请移步编辑器IDE之VSCodenode装置下载https://nodejs.org/en/ 装置node -v 查看是否装置胜利 批改全局批改npm全局安装包门路 & 缓存门路npm config set prefix "D:/Program Files/nodejs/npm_global"npm config set cache "D:/Program Files/nodejs/npm_cache"装置 npm install -g eslint装置后尝试 eslint -v 你会发现提醒eslint 不是外部命令。所以持续下一步 配置环境变量 讲下面配置的全局安装包prefix门路作为新的环境变量即可 5.验证尝试 eslint -v 可失常运行即可,配置完环境变量须要从新起一个cmd窗口,之前的可能会提醒不是外部命令 yarn装置下载https://classic.yarnpkg.com/zh-Hans/docs/install/#windows-stable git下载安装https://git-scm.com/downloads git config --global user.name "xft" git config --global user.email xft@test.comSSH 配置生成cd ~/.sshssh-keygen -t rsa -C "xft@test.com"获取ssh keycat ~/.ssh/id_rsa.pub设置ssh key

August 12, 2020 · 1 min · jiezi

关于npm:node-yarn-git-安装及配置

此文仅仅用来记录换电脑时根本开发环境装置,VSCode局部请移步编辑器IDE之VSCodenode装置下载https://nodejs.org/en/ 装置node -v 查看是否装置胜利 批改全局批改npm全局安装包门路 & 缓存门路npm config set prefix "D:/Program Files/nodejs/npm_global"npm config set cache "D:/Program Files/nodejs/npm_cache"装置 npm install -g eslint装置后尝试 eslint -v 你会发现提醒eslint 不是外部命令。所以持续下一步 配置环境变量 讲下面配置的全局安装包prefix门路作为新的环境变量即可 5.验证尝试 eslint -v 可失常运行即可,配置完环境变量须要从新起一个cmd窗口,之前的可能会提醒不是外部命令 yarn装置下载https://classic.yarnpkg.com/zh-Hans/docs/install/#windows-stable git下载安装https://git-scm.com/downloads git config --global user.name "xft" git config --global user.email xft@test.comSSH 配置生成cd ~/.sshssh-keygen -t rsa -C "xft@test.com"获取ssh keycat ~/.ssh/id_rsa.pub设置ssh key

August 12, 2020 · 1 min · jiezi

关于npm:cnpm-v卡顿无法下载各种包

问题产生:执行cnpm的时候,就始终卡住 先卸载原来的cnpm npm uninstall -g cnpm --registry=https://registry.npm.taobao.org注册模块镜像 npm set registry https://registry.npm.taobao.orgnode-gyp 编译依赖的 node 源码镜像 npm set disturl https://npm.taobao.org/dist清空缓存 npm cache clean --force装置cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org作者:哆啦在这A梦在哪 链接:https://www.jianshu.com/p/f73... 起源:简书 著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。

August 10, 2020 · 1 min · jiezi

关于npm:cnpm-v卡顿无法下载各种包

问题产生:执行cnpm的时候,就始终卡住 先卸载原来的cnpm npm uninstall -g cnpm --registry=https://registry.npm.taobao.org注册模块镜像 npm set registry https://registry.npm.taobao.orgnode-gyp 编译依赖的 node 源码镜像 npm set disturl https://npm.taobao.org/dist清空缓存 npm cache clean --force装置cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org作者:哆啦在这A梦在哪 链接:https://www.jianshu.com/p/f73... 起源:简书 著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。

August 10, 2020 · 1 min · jiezi

关于npm:一站配齐所有国内镜像

开发过程中,咱们常常会用到各种各样的包管理工具,简直每种包管理工具缺省设置都是从国外服务器下载相应的软件安装包,或者下载很慢,或者罗唆无奈下载。以下列出我罕用的所有国内镜像,不便有相似需要的同学参考(不定期更新,感觉有用的同学请留神珍藏)。 我平时用的shell是fish,所以上面的语法全都是fish相干的set -x,如果是用缺省的bash,能够替换成export命令。 操作系统相干brew国内镜像cd /usr/local/Homebrewgit remote set-url origin https://mirrors.ustc.edu.cn/brew.gitcd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-coregit remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.gitcd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-caskgit remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git# brew国内镜像set -x HOMEBREW_BOTTLE_DOMAIN https://mirrors.ustc.edu.cn/homebrew-bottlesJavascript相干npm国内镜像npm config set registry https://registry.npm.taobao.org/yarn国内镜像yarn config set registry https://registry.npm.taobao.org/pnpm国内镜像pnpm config set registry https://registry.npm.taobao.org/electron国内镜像set -x ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/node-sass国内镜像set -x SASS_BINARY_SITE https://npm.taobao.org/mirrors/node-sass/fsevents国内镜像set -x FSE_BINARY_HOST_MIRROR https://npm.taobao.org/mirrors/fsevents/更多更多设置,或者懒得一个一个设置的同学也能够参考这里: https://gist.github.com/hetyk... 把这些代码下载到一个shell脚本里,一键增加实现。 Python相干pip国内镜像$ cat ~/.pip/pip.conf[global]index-url=https://pypi.tuna.tsinghua.edu.cn/simpleconda国内镜像conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/conda config --set show_channel_urls yes其它语言flutter国内镜像set -x PUB_HOSTED_URL https://pub.flutter-io.cnset -x FLUTTER_STORAGE_BASE_URL https://storage.flutter-io.cn补充github国内镜像如果是在git clone时遇到了问题,能够先在码云建设一个库,起源取自github,然后同步码云这个库即可。 ...

July 19, 2020 · 1 min · jiezi

听陶建辉直播分享技术创业经验总结

终于明天松口气,有工夫听了下陶建辉分享技术守业教训直播。为了能不便给还在加班的对象分享明天学习到的内容,索性整理出来一份,分享给也同样关注该话题的人~一、直播内容记录1.技术人怎么防止掉入坑2.怎么找到技术守业的反向3.怎么找到第一笔天使投资4.应该组建怎么的守业团队5.有信心很重要6.怎么留住人才7.胜利的法宝:策略办法 二:这些心愿对做大数据的他有用 三、问答环节的播种:1.举荐的几本守业人要看的书:《Lean Startup》《Hard thing about hard things》《Crossing Chasm》《Innovator's Dilemma》2.大佬微博:陶建辉-Jeff3.大佬公司官网:https://www.taosdata.com/cn/4.大佬微信公众号:taosdata5.github上开源我的项目:https://github.com/taosdata/T...6.补充一点:要纯熟的把握英文,要多结识各界的搭档 因为工夫较晚,改天再做深刻的学习探讨,还会加上本人的感悟。@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 发现明天的本人真有点开始不一样起来了~ 自律真的会带来更多的扭转~ 加油( •_•) ----写于2020.7.9 21:51

July 9, 2020 · 1 min · jiezi

思考总结npm认识

npm认识作为一个前端开发者,用了这么久的npm,有一天突然问自己。自己究竟对npm有多了解? npm是一个包管理工具想想我们最早写js的时候,对于重复引用的代码片段,我们是怎么引用的? <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">是不是感觉熟悉又陌生。这就是最早我们引用js的方式。后来由于nodejs出现了,作为一种可以运行在系统上的语言,没有了html,我们该怎么引用js呢? module.exports=function(x){console.log(x);}; var xxx = require('xxx');因此出现了CommonJS规范。当然此外,我们还有AMD,CMD等。那么这些规范的出现使得我们可以更加愉快地引用js代码。这时候我们便需要一种方式可以更方便地提交或者获取某些代码。npm因此出现了。他有以下功能: 允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。npm做了什么?首先我们要知道我们的项目中需要用到什么依赖,版本是什么?这些信息需要找一个地方记录,这就是package.json。 npm initnpm可以通过命令创建模块,生成 package.json 文件,生成的文件包含了基本的结果。当我们需要从网上下载依赖的时候只要执行 npm ininstall xxxnpm就会把依赖下载放到node_modules文件夹中,并在package.json中记录我们下载的依赖的名称和版本号。 引用流程当我们引用js的时候,系统该去哪里找我们需要的代码?npm作了一个规范,就是node_modules。系统会先当前目录找有没有适合的代码,如果找不到就往上一层文件夹找,找到node_modules之后就会在node_modules里找。找到代码,便引用成功。如果找不到就在全局里面找,还找不到就会抛出错误。 package-lock.json上面刚刚说到的,npm引用的时候是一层一层的往外找的,这是为什么呢?因为我们在开发的时候引用的某些依赖本身,并不是完全由该作者全程写完的。有可能某些依赖中还依赖着另一个包。所以我们会看到node_modules包里的文件夹里还有一个package.json,而他的依赖则放在当前的文件夹里的node_modules中。 ├─node_modules └─xxx └─node_modules这样就会产生一个问题,万一引用的依赖又套另一层依赖,这样由非常多层依赖组层。最后引用的路径就会很长,有可能会遇到不可估算的错误。另外这样也会导致同一个包会被下载多次的问题。为了解决这个问题,从npm 5(这就是为什么会有yarn 的原因) 之后package-lock.json出现了。他的作用是记录这项目中用到的依赖包的具体版本号,和位置信息。在每次install的时候他会先检查node_modules的首层有没有该依赖需要的包,如果有了就不下载。如果有同名的包,可是版本号需求不同,就会在该package.json的路径下再创建node_modules把那个需要的包放进去。这样由于引用的时候是一层一层外网找的,就可以确保当前依赖引用的是正确的包。也大大减少了套层的情况。 下载的库在哪里?我们都知道当我们执行npm install的时候,会下载我们想要的代码。可是他是从哪里下载回来的呢?npm有自己的一个代码库,也就是我们常用的https://www.npmjs.com。可是这里有个问题,这个地址的国外的服务器,会导致我们经常出现下载很慢的结果。这就出现了很多我们说的“源”。所谓的“源”就是不同的代码仓库,国内目前用的最多的应该就是阿里的源,想要改变下载代码的仓库只要执行。 npm install xxx --registry=https://registry.npm.taobao.org这样我们就可以改成从阿里的服务器上下载资源。如果想要全局替换这个源,可以执行 npm config set registry https://registry.npm.taobao.org这时候可能又聪明的同学要问了,能不能在不改全局配置的情况下给项目规定一个特定的源?其实在npm的安装目录下有一个.npmrc文件,他记录着npm的源地址,我们通过上面的命令事实上就是在修改他。如果我们想要在项目中配置特定的源,只要在项目目录下新建一个.npmrc文件,编辑内容: registry=https://registry.npm.taobao.org这样只要我们在这个项目下执行npm install都会指向我们规定的地址了。 待补充...

July 7, 2020 · 1 min · jiezi

Npm常用命令

欢迎订阅我的公众号,微信搜索【 比邻之地 】我会定期发布教程,分享软件,有问题欢迎留言! 介绍 NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包,类似的还有 cnpm、yarn、tyarn ··· 1. 切换淘宝源、官方源强烈建议安装 nrm :npm 的源管理器 切换 npm 镜像源 npm config set registry [这里是镜像源 url]a 官方源 npm config set registry https://registry.npmjs.org速度慢可以,https -> http,这样网速就会好很多 npm config set registry http://registry.npmjs.orgb 淘宝源 npm config set registry https://registry.npm.taobao.orgc 使用cnpm(用cnpm -v检测是否成功) npm install -g cnpm --registry=https://registry.npm.taobao.orgd 手动修改设置淘宝源 1.打开.npmrc文件(node默认安装再C盘-C:Program Filesnodejsnode_modulesnpmnpmrc,没有的话可以使用git命令行建一个( touch .npmrc),用cmd命令建会报错)2.增加 registry=https://registry.npm.taobao.org 即可。检测是否修改成功,查看当前使用的 npm 镜像源 npm config get registryornpm info express显示进度条 npm config set loglevel=http2. 用npm安装依赖包node包的安装分为全局模式和本地模式:A、一般情况下会以本地模式运行,包会被安装到和你的应用程序代码的本地node_modules> 目录下。 ...

July 6, 2020 · 6 min · jiezi

一分钟教你发布npm包

文章简介:1、摘要:什么是npm?2、如何发布一个自己的npm包3、发布错误集锦 摘要:什么是npm?npm是javascript著名的包管理工具,是前端模块化下的一个标志性产物简单地地说,就是通过npm下载模块,复用已有的代码,提高工作效率和移动端开发中,iOS使用的Cocoapods,Android使用的maven有异曲同工之妙。 如何发布一个自己的npm包1、创建一个npm的账号发布包之前你必须要注册一个npm的账号 2、初始化一个简单的项目发布a、本地创建一个文件夹:例如:z-toolb、执行命令进入目录: $ cd z-tool c、执行npm init 初始化项目。默认一路回车就行 sh-neverleave:z-tool neverleave$ npm initThis utility will walk you through creating a package.json file.It only covers the most common items, and tries to guess sensible defaults.See `npm help json` for definitive documentation on these fieldsand exactly what they do.Use `npm install <pkg>` afterwards to install a package andsave it as a dependency in the package.json file.Press ^C at any time to quit.package name: (z-tool) version: (1.0.0) description: entry point: (index.js) test command: git repository: keywords: author: license: (ISC) About to write to /Users/neverleave/Desktop/z-tool/package.json:{ "name": "z-tool", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC"}Is this ok? (yes) 默认字段简介:name:发布的包名,默认是上级文件夹名。不得与现在npm中的包名重复。包名不能有大写字母/空格/下滑线!version:你这个包的版本,默认是1.0.0。对于npm包的版本号有着一系列的规则,模块的版本号采用X.Y.Z的格式,具体体现为: 1、修复bug,小改动,增加z。 2、增加新特性,可向后兼容,增加y 3、有很大的改动,无法向下兼容,增加xdescription:项目简介mian:入口文件,默认是Index.js,可以修改成自己的文件 scripts:包含各种脚本执行命令test:测试命令。author:写自己的账号名license:这个直接回车,开源文件协议吧,也可以是MIT,看需要吧。d、在z-tool文件夹中创建一个文件名为index.js的文件,简单的写了一下内容。 ...

July 2, 2020 · 3 min · jiezi

自定义CLI

1、初始化项目 mkdir auto-router-clicd auto-router-clinpm init -ynpm i commander download-git-repo ora handlebars figlet clear chalk open watch -s2、在项目目录(auto-router-cli)下新建bin文件夹,在bin文件夹新建命令文件kkb.js: #!/us/bin/env node // 指定解析环境为nodeconsole.log('auto-router-cli....')const program = require('commander') //命令行工具program.version(require('../package.json').version) // 或直接写 '1.0.1'program .command('init <name>') // 定义init命令 .description('init project') .action(name => { // 指定命令要做什么事,回调函数中实现命令功能 console.log('init ' + name); }) program.parse(process.argv)3、修改package.json,添加bin命令: { "bin": { "kkb": "./bin/kkb.js", },}4、执行npm link,把命令链接到全局,相当于全局安装npm包:npm i auto-router-cli -g,这样直接在命令行运行kkb,就会执行auto-router-cli/bin/kkb.js文件。

June 30, 2020 · 1 min · jiezi

npm-常用命令

npm list // 查看本地已安装模块清单npm list [packageName] // 查看本地已安装模块版本npm info [packageName] //查看模块的详细信息 包括各版本号等npm view [packageName] version // 查看模块远程最新版本npm view [packageName] versions // 查看模块远程所有版本npm install [packageName] //安装模块npm install [packageName]@xxx.xx //安装模块的指定版本npm install [packageName] -g //全局安装模块npm install [packageName] --save 安装好后写入package.json的dependencies中(生产环境依赖)npm install [packageName] --save-dev 安装好后写入package.json的devDepencies中(开发环境依赖)npm uninstall [packageName] // 删除模块npm uninstall [packageName] -g //卸载全局模块npm uninstall [packageName] --save // 删除模块,同时删除模块留在package.json中dependencies下的对应信息npm uninstall [packageName] --save-dev // 删除模块,同时删除模块留在package.json中devDependencies下的对应信npm list --depth=0 //查看所有高级的npm moudlesnpm list --depth=0 -global //查看所有全局安装的模块

June 23, 2020 · 1 min · jiezi

记录npm报错-Command-failed-CWindowssystem32cmdexe

错误 这是node-sass安装时出错 出错原因是:GitHub的raw.githubusercontent.com无法链 至于为啥没有连接,可能是部分地区解析Ip被污染了。 解决方法: 修改hosts解决199.232.28.133  raw.githubusercontent.com

June 9, 2020 · 1 min · jiezi

如何通过nvm安装多版本nodejs如果nodejs安装成功npm安装失败了怎么办

我们在开发项目的时候,最开始,是只有一个老的项目,老项目单独安装了node版本4.4.7,后来有了新项目,由于有两个项目,但是一个需要老一些版本的node,一个需要新版本的node,因此需要在两个版本之间进行切换,这时候应该怎么做呢? nvm可以很好的解决这个问题,我们一起来看看把。 一、什么是nvm? nvm就是nodejs version manage 叫做nodejs 版本管理,而nodejs有很多版本,场景如下: 1、而你手上开发的有多个项目又分别是不同的nodejs版本,咱们就可以用nvm轻松切换! 2、假设你正在开发的项目开始使用的nodejs版本是8.0,而现在因为某些原因,你需要升级 或者 降级 nodejs 版本,也可以使用 nvm 轻松切换 二、搭建步骤:1、下载nvm https://github.com/coreybutler/nvm-windows/releases ,解压并且安装(安装nvm的地址可以自己随便选择一个位置,node地址设置为默认的:"C:\Program Files\nodejs",这里需要注意网上很多说地址不能设为"C:\Program Files",安装路径不支持空格,否则node无法使用,实际测试并无影响) 2、打开 cmd , 输入 nvm -v,如下,表示安装成功 3、(重要) 设置 node 和 npm 镜像地址 在nvm安装目录,找到 setting.txt加上如下两行: node_mirror: https://npm.taobao.org/mirror... npm_mirror: https://npm.taobao.org/mirror... 添加后如下图所示: 4、(重要) 安装你要的nodejs版本,必须是npm和nodejs都成功,因为有时候会npm或者nodejs不会下载成功,不成功的原因很多,前提必须按我的这个步骤,并且是之前没有装nodejs,或者是卸载干净了nodejs。通过nvm list available命令查看可下载的nodejs版本信息,根据需要下载对应的版本,LTS列表示稳定版本。 nvm install 版本号 如上表示成功了,继续检验是否真的成功,进入nvm目录查看: 有红圈出来的内容就是成功的,如果没有就是不行的,就需要重新手动下载了 5、切换版本 nvm use 版本号 这样就好了,node和 npm都好了 6、nvm命令: 1,nvm nvm list 是查找本电脑上所有的node版本 ...

June 5, 2020 · 1 min · jiezi

Vue项目接入Paypal详解

一、支付流程 在paypal的官网上给出了这个按钮内部封装的流程,整个流程只需要用户点击按钮,触发创建订单事件,然后我们再监听用户支付成功的回调,拿到订单id传给后端,让后端再进行一次校验。 二、实现方案接入方式优点缺点相关资料在html中插入paypal的script脚本实现方式比较简单1、安全性问题:公司的client_id会暴露在代码中2、引用的按钮样式比较难自定义官方文档:https://developer.paypal.com/docs/checkout/integrate/#更详细的说明:https://segmentfault.com/a/1190000021366504使用官方提供的npm包(有好几个)1、可以自定义,不需要使用官方给定的button,可以在自己的按钮上绑定创建事件2、不会把client_id暴露出来1、需要仔细阅读文档,开发难度会大一点2、有的需要配合node一起开发github:https://github.com/paypal/paypal-checkout-componentsnode-sdk:https://github.com/paypal/Pay...使用别人封装好的npm包1、使用起来方便2、文档比较清晰1、可能存在没人维护的风险2、可自定义的部分不多3、使用的是Paypalv1版接口,官网上用的是v2接口,但是应该不影响github:https://github.com/khoanguyen96/vue-paypal-checkout这是我目前总结的几种实现方案,如果有更好的方案,欢迎在评论区告诉我~ 三、项目中实现 由于我是在vue项目实现,经过考虑,别人封装的vue-paypal-checkout库可以满足开发需求,而且使用起来比较简单,所以暂时选择采取这个方案,接下来我们看看代码实现吧! npm install vue-paypal-checkoutimport PayPal from 'vue-paypal-checkout'export default { data() { return { credentials: { sandbox: '填写沙箱环境client_id', production: '填写线上环境client_id' }, buttonStyle: { label: 'pay', size: 'small', shape: 'rect', color: 'blue' } } }, components: { PayPal }, methods: { paymentAuthorized (data) { // 授权完成的回调,可以拿到订单id console.log(data); }, paymentCompleted (data) { // 用户支付完成的回调,可以拿到订单id console.log(data); }, paymentCancelled (data) { // 用户取消交易的回调 console.log(data); } }}<PayPal amount="10.00" // 付款的钱数 currency="USD" // 货币种类,默认为美元 :client="credentials" // client_id认证信息 env="sandbox" // 指定环境,默认为线上,也就是production :button-style="buttonStyle" // 自定义按钮样式 @payment-authorized="paymentAuthorized" @payment-completed="paymentCompleted" @payment-cancelled="paymentCancelled"></PayPal>以上就是我的代码实现过程,具体内容可以根据业务来修改,实现起来还是蛮简单的,如果只是想嵌入Paypal的按钮,完成基本的支付操作,这个还是完全可以支持的。 ...

June 4, 2020 · 1 min · jiezi

npm-ERR-network-timeout

一、问题周一修改了一个地方,把分支合并到develop,然后自动触发gitlab的ci,等了一会再点开看log,发现报错了。 具体如下图所示: 二、初步分析看提示是说从源拉取依赖的时候,网络超时了。 初步断定是网络问题,所以想隔一会再重试看看。结果重试了好几次,结果都一样。 因为修改的功能需要在开发环境验证后,再部署到测试环境给测试验证,然后部署到预发布环境,所以还是比较着急的。 人是否成长就看在应对突发问题导致进展被卡住能否沉稳冷静解决问题。 但往往是说起来容易做起来难。 我觉得可以这样:在心里自己跟自己说几遍,从现在开始,给自己五分钟时间,什么都别想,从头到尾再仔细看看,找出问题所在。 因为上周五及之前跑ci都没问题,重试了几次也不行,也问了后台跑ci的机器网络等问题,也没改动什么,而我又没权限登录机器查看相关信息,所以只能搜索npm ERR! network timeout来分析问题。 三、各种说法:详细讲解可点击

June 1, 2020 · 1 min · jiezi

npm更新package后重启IDE的重要性

npm更新package后要重启一下IDE,因为IDE本身是不会自动更新的,有次项目开发时遇到个问题需要更新package,更新后发现问题没有解决,就很奇怪,求助了一个大佬后才恍然大悟要重启IDE,果然,重启后之前的报错问题就解决了......重启大法真牛逼。

May 27, 2020 · 1 min · jiezi

Unexpected-end-of-JSON-input-while-parsing-near

npm install的时候报Unexpected end of JSON input while parsing near 解决方案:清除缓存 npm cache clean --force

May 27, 2020 · 1 min · jiezi