在使用 NVM(Node Version Manager)安装 Node.js 时,您可能会遇到类似如下的错误提示: 这个问题通常是由于网络连接不畅或访问 nodejs.org 的服务器时出现超时所导致的。当 NVM 尝试从 nodejs.org 下载 Node.js 版本文件时,网络阻塞可能会引发这个问题,尤其是在国内网络环境下。 解决方案 为了绕过这一问题,可以通过设置镜像源来加速下载。具体步骤如下: 设置 npm 镜像源: 使用 NVM 时,可以通过以下命令将 npm 的镜像源设置为国内的 npm 镜像源:
1 |
nvm npm_mirror https://npmmirror.com/mirrors/npm/ |
这个命令将会指向 npm 镜像源,确保在安装 npm 相关的包时可以顺利下载。 设置 Node.js 镜像源: 同样地,我们可以将 Node.js 的镜像源设置为国内的 Node.js 镜像源:
1 |
nvm node_mirror https://npmmirror.com/mirrors/node/ |
这个命令将 Node.js 下载源指向 npmmirror 的镜像服务器,避免访问 nodejs.org 时出现超时的问题。 设置好镜像源之后,您可以正常安装 Node.js 了。例如:
1 |
nvm install 20.0.0 |
这将从国内的镜像源下载并安装指定版本的 Node.js。 总结 通过设置 npm 和 Node.js 的镜像源,可以有效解决由于网络问题导致的 NVM 安装 Node.js 失败的问题。这种方法特别适用于在国内环境中开发时遇到的网络连接问题。 希望这个解决方案能够帮助您顺利安装并使用 Node.js。如果您在其他方面遇到问题或有进一步的疑 from:https://blog.csdn.net/qq_67572731/article/details/141465938
View Detailsnvm全名node.js version management,顾名思义是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。下面列出下载、安装及使用方法。
View Details错误的原因,npm版本问题; 解决办法: 1》更新到最新版本:npm install npm -g 要记住全局更新 2》回退版本:npm install -g npm@5.4.0 用cnpm 会快一些 from:https://www.cnblogs.com/hou-yuan-zhen/p/11703722.html
View Details解决方案 今天像往常一样,编写文章,并使用gulp bulid压缩代码,但是一运行:gulp build 就出现了这个错误:AssertionError: Task function must be specified。 gulp项目需要全局安装gulp和项目内安装gulp,通过 gulp -v 查看全局gulp 和本地项目的gulp版本: image.png 这俩显然,不一致。 下面,我们可以看到项目里记录的gulp的版本号: image.png 可以卸载修改json文件里面的版本号:为gulp 3 版本。如 3.9.1 重新运行 npm install gulp 3 和 gulp 4运行方式是不一样的,所以会出现错误。具体细节,可以看这里 gup3 VS gulp4 区别 Gulp 4最大的变化就是你不能像以前那样传递一个依赖任务列表。 Gulp3,如果有一个任务A,B和C的列表,你想在一个序列中运行(确保A在B开始之前完成,而B在C开始之前完成),代码如下:
1 2 3 4 5 6 7 8 9 |
gulp.task('a', function () { // Do something. }); gulp.task('b', ['a'], function () { // Do some stuff. }); gulp.task('c', ['b'], function () { // Do some more stuff. }); |
在Gulp 4中,你不能再这样做了。你会得到以下错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
assert.js:85 throw new assert.AssertionError({ ^ AssertionError: Task function must be specified at Gulp.set [as _setTask] (/home/hope/web/node_modules/undertaker/lib/set-task.js:10:3) at Gulp.task (/home/hope/web/node_modules/undertaker/lib/task.js:13:8) at Object.<anonymous> (/home/hope/web/gulpfile.js:31:6) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.require (module.js:497:17) at require (internal/module.js:20:19) |
不要用Gulp3的方式指定依赖任务,你需要使用gulp.series和gulp.parallel,因为gulp任务现在只有两个参数。 gulp.series:按照顺序执行 gulp.paralle:可以并行计算
1 2 3 |
gulp.task('my-tasks', gulp.series('a', 'b', 'c', function() { // Do something after a, b, and c are finished. })); |
1 2 3 |
gulp.task('build', gulp.parallel('styles', 'scripts', 'images', function () { // Build the website. })); |
或者这样
1 2 3 |
gulp.task('my-tasks', gulp.series('a', gulp.parallel('styles','scripts', 'images'), 'b', 'c', function() { // Do something after a, b, and c are finished. })); |
相关任务必须在被调用之前发生。 参考: https://github.com/gulpjs/gulp/blob/master/docs/API.md https://www.fastless.com/gulp-4 https://www.jianshu.com/p/40b99bed3127 作者:cuteximi_1995 链接:https://www.jianshu.com/p/c30ff8592421 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
View Detailsgulpfile.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
var gulp = require('gulp'); var webserver = require('gulp-webserver'); gulp.task('webserver', function () { gulp.src('./') .pipe(webserver({ host: 'localhost', port: 3000, livereload: true, open: './pages/myPages/login.html', directoryListing: { enable: true, path: './' }, proxies: [ { source: '/api', target: 'http://jsonplaceholder.typicode.com' } ] })) }); gulp.task('default', ['webserver'], function () { console.log('成功'); }); |
1、在本地起一个服务,端口号为3000。 2、open:默认打开的文件的路径 3、directoryListing:是否显示文件列表 4、proxies: 设置代理 接口调用: 接口调用 url http://localhost:3000/api 作者:动次动次forever 链接:https://www.jianshu.com/p/237bc5c04fa1 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
View Details为什么需要使用代理? 目前,前端发展飞速,前后端分离式开发已经不是新鲜事儿。 1 如果前端只是静态的页面(不需要调用后端的api加载动态数据),那么前端直接在本地开发即可。 即使是前后端分开部署,只需要单独为前端启动一个服务,使用gulp-connect即可。不会?(请戳gulp之用gulp-connect开启一个本地webServer) 2 如果前端需要调用后端提供的接口呢?除非前后端部署在同一个服务器上,否则由于浏览器的限制是没办法跨域请求数据的。真实情况是,我们在本地开发时就需要访问接口,这时后端的程序猿给你的往往是这样一个地址 http://192.168.1.123/controller/action,有人说上传代码到http://192.168.1.123/放在一个目录下不就行了,是啊!可以的。但是好麻烦有没有,调试接口需要传代码上去!!!! 3 如果我的数据是从其他的服务器来的呢?例如我想访问豆瓣的开放接口
1 2 3 4 |
$.post(<span class="hljs-string">'https://api.douban.com/v2/book/1220562'</span>,{},<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{ <span class="hljs-built_in">console</span>.log(data); }) |
豆瓣告诉你,不行!你跨域了! 所以,还是代理来的方便。 代理是个什么鬼? 代理请求通俗点讲,就是把发往 a.com的请求,通过代理服务器发送到b.com。 怎么开启一个代理? 代码如下:
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 |
<span class="hljs-comment">//服务端口</span> <span class="hljs-keyword">const</span> PORT=<span class="hljs-number">8000</span>; <span class="hljs-comment">//启动服务的根目录</span> <span class="hljs-keyword">const</span> server_root=<span class="hljs-string">'src'</span> <span class="hljs-comment">//引用gulp</span> <span class="hljs-keyword">var</span> gulp = <span class="hljs-built_in">require</span>(<span class="hljs-string">'gulp'</span>); <span class="hljs-comment">//引用gulp开启服务的插件</span> <span class="hljs-keyword">var</span> connect = <span class="hljs-built_in">require</span>(<span class="hljs-string">'gulp-connect'</span>); <span class="hljs-comment">//引用插件 gulp代理中间件插件</span> <span class="hljs-keyword">var</span> proxy = <span class="hljs-built_in">require</span>(<span class="hljs-string">'http-proxy-middleware'</span>); <span class="hljs-comment">//开启服务</span> gulp.task(<span class="hljs-string">'proxyServer'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>() </span>{ connect.server({ <span class="hljs-attr">root</span>: [server_root], <span class="hljs-attr">port</span>: PORT, <span class="hljs-attr">middleware</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">connect, opt</span>) </span>{ <span class="hljs-keyword">return</span> [ proxy(<span class="hljs-string">'/api'</span>, { <span class="hljs-attr">target</span>: <span class="hljs-string">'https://api.douban.com/v2'</span>,<span class="hljs-comment">//代理的目标地址</span> changeOrigin:<span class="hljs-literal">true</span>,<span class="hljs-comment">//</span> pathRewrite:{<span class="hljs-comment">//路径重写规则 </span> <span class="hljs-string">'^/api'</span>:<span class="hljs-string">''</span> } }) ] } }); }); |
说明 '/api' =>匹配你要代理的请求地址前缀 target=》你要把请求代理到哪 pathRewrite =》是把你再页面中写的请求地址 某部分 重写为后面的字符串 (例子中讲 请求中写的 /api 重写为 空字符串) 也就是发往 /api/book/1220562的请求最终会被发往 https://api.douban.com/v2/book/1220562 页面写请求时的写法
1 2 3 4 |
$.post(<span class="hljs-string">'/api/book/1220562'</span>,{},<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{ <span class="hljs-built_in">console</span>.log(data); }) |
目录结构 image.png 运行效果 image.png 结语 当然还有其他的方式,比如 node、cros、jsonp、phpheader、nginx设置代理 作者:coder_turbo 链接:https://www.jianshu.com/p/cc543fd0d7c5 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
View Details最近在学习ES6,在B站上看了一些视频再结合阮一峰老师的《ES6标准入门》基本上对ES6的各特性过了一遍,那就开始动手练项目咯,在找到视频对应的代码后,下载并运行出现了几个问题,通过百度又没查到相关的解决思路,这不还得科学上网,毕竟你询问的人群是全世界,总有适合的哪一个。话不说,开始叙述问题,并一步步的解决问题。项目的源代码在我的github上:https://github.com/sun2013126370/es6-lottery-master,视频的话去B站找咯。 先说一下我的相关配置吧
1 2 3 4 |
nodejs版本: v10.13.0 npm版本:6.4.1 gulp版本:CLI version 3.9.1(全局安装-npm install -g gulp) |
1 2 3 第一个问题: Failed to load external module @babel/register 网上说gulp的版本变成3.9.0(命令:npm install -g gulp@3.9.0)就可以,可以解决这个问题,但是至今还没找到出现这个问题的原因。还好,这个问题并不影响项目的运行,因此选择忽略这个错误或者将gulp的版本换成3.9.0都可以。 第二个问题:TypeError: require.extensions.hasOwnProperty is not a function 这个问题是由版本造成的,打开项目中的package.json,将0.3.1版本改成0.3.2即可,并执行npm install 命令。 重新执行gulp --watch命令,又发现了如下错误,go on! 第三个问题:gulp[13772]: src\node_contextify.cc:628: Assertion `args[1]->IsString()’ failed. 具体什么原因,还没有搞明白,后续再补充。解决这个问题的办法就是npm install natives,再次运行 gulp --watch,OK啦,项目起来了。在浏览器输入localhost:3000,就看到效果了。那接下来就是敲敲项目代码,把出现问题的原因找出来。 from:https://blog.csdn.net/a2013126370/article/details/84102343
View Details背景: 这个问题不是一天两天了,有时候是网速不行,有时候是被墙了,有时候是github把node-sass的包转移目录导致下载失败。 Cannot download "https://github.com/sass/node-sass/releases/download/xxx/binding.node的问题 另附node-sass的binding.node各个版本的安装包,哪里少,就单独下载哪个,下载完了之后,跟着我,一起把文件放在指定位置即可解决这个问题 https://github.com/sass/node-sass/releases/tag/v4.7.2 1.本机位置 C:\Users\Administrator\AppData\Roaming\npm-cache\node-sass\ 这个里面是各种版本,报错提示你哪个版本下载失败,你就塞到哪个版本的文件夹里,如图所示 2.删除项目的node_moduls目录 3.重新npm install 4.另附全局安装命令
1 2 3 |
npm i sass-loader node-sass webpack <span class="hljs-comment">--g</span> npm i style-loader css-loader <span class="hljs-comment">--g</span> |
qq 43163707 落雨 本文地址:http://www.cnblogs.com/ae6623/p/8711853.html
View Details前不久在 知乎 上回答了一个问题:大公司里怎样开发和部署前端代码?。其中讲到了大公司在前端静态资源部署上的一些要求: 配置超长时间的本地缓存 —— 节省带宽,提高性能 采用内容摘要作为缓存更新依据 —— 精确的缓存控制 静态资源CDN部署 —— 优化网络请求 更资源发布路径实现非覆盖式发布 —— 平滑升级 其中比较复杂的部分就是 以文件的摘要信息为依据,控制缓存更新与非覆盖式发布 这个细节。因此基于 fis 包装了一个简单的命令行工具,并设立此项目,用于演示这部分功能。 这个工具基于 fis 的小工具是完全可以用作工程中的,有任何问题可以在 这里 留言。 请跟着下面的步骤来使用这个命令行小工具: 第一步:安装工具 这个命令行小工具依赖 nodejs 环境,因此,请先确保本地安装了它。 使用 nodejs 随带的 npm 包管理工具进行安装:
1 |
npm install -g rsd |
第二步:创建项目 在 命令行 下clone本仓库,或者自己创建一个新的项目,并进入:
1 2 |
mkdir rsd-project <span class="pl-c"><span class="pl-c">#</span> 项目名任意</span> <span class="pl-c1">cd</span> rsd-project |
在项目根目录下创建一个空的 fis-conf.js 文件,这是工具配置,什么都不用写,空着就行。 然后开始在项目目录下,随意创建或添加 页面、脚本、样式、图片、字体、音频、视频等等前端资源文件,正常写前端代码吧! 第三步:发布代码 在项目根目录下执行:
1 |
rsd release --md5 --dest ../output |
然后去到 ../output 目录下去查看一下产出结果吧,所有静态资源都以md5摘要形式发布了出来,所有资源链接,我说 所有链接,包括html中的图片、样式、脚本以及js中的资源地址、css中的资源地址全部都加上了md5戳。 上述命令中,--md5 就是表示要给所有资源定位标记加上摘要信息的意思,不加这个参数就没有摘要信息处理。--dest ../output 表示把代码发布到当前目录上一级的output目录中。整个这条命令还可以简写成:
1 |
rsd release -m -d ../output |
或者进一步连写成:
1 |
rsd release -md ../output |
在本地服务器中浏览发布代码 你本地安装了诸如 Apache、Nginx、Lighttpd、IIS等服务器么?如果安装了,假设你的服务器 根目录 在 d:\wwwroot,你可以利用rsd工具的release命令,把代码发布过去,比如:
1 |
rsd release -md d:<span class="pl-cce">\w</span>wwroot |
这样就把代码发布到了本地服务器根目录下,然后就可以在浏览器中查看效果了! 如果你本地没有安装任何服务器,你可以使用rsd内置的调试服务器,执行命令:
1 |
rsd server start |
接下来我们同样要把代码发布到这个内置服务器中,release命令如果省略 --dest <path>参数,就表示把代码发布到内置服务器的根目录下:
1 |
rsd release -m |
在浏览器中访问: http://localhost:8080 即可 一些小技巧 rsd集成了对很多前端编程语言的支持,包括: 类CSS语言:less, sass, scss, stylus 类JS语言:coffee-script 类HTML语言:markdown, jade 前端模板:handlebars-v1.3.0, EJS 内置了压缩器,在release的时候追加 -o 或者 --optimize 参数即可开启,压缩器包括: clean-css: 压缩所有类CSS语言代码 uglify-js: 压缩所有类JS语言代码 html-minifier: 压缩所有类HTML语言代码 还可以给资源加CDN域名,在release的时候追加 -D 或者 --domains 参数即可,域名配置写在fis-conf.js里:
1 2 |
<span class="pl-c"><span class="pl-c">//</span> fis-conf.js</span> <span class="pl-smi">fis</span>.<span class="pl-smi">config</span>.<span class="pl-c1">set</span>(<span class="pl-s"><span class="pl-pds">'</span>roadmap.domain<span class="pl-pds">'</span></span>, [ <span class="pl-s"><span class="pl-pds">'</span>http://localhost:8080<span class="pl-pds">'</span></span> ]); |
所有常规代码中的资源定位接口都会经过工具处理,包括: 类CSS文件中: 背景图url font-face字体url ie特有的滤镜属性中的src 类JS文件中: 提供了一个叫 __uri('path/to/file') 的编译函数用于定位资源 类HTML文件中: link标签的href属性 script, img, video, audio, object 等标签的src属性 script标签中js代码里的资源定位标记 style标签中css代码里的资源定位标记 所有资源文件可以任意相互引用,工具会处理资源定位标记,使之服从知乎回答中提到的优化策略。 还提供了资源内嵌的编译接口,用于把一个资源的内容以文本、字符串或者base64的形式嵌入到 任意 一个文本文件中。 为了不用每次保存代码就执行一下release命令,工具中提供了文件监听和浏览器自动刷新功能,只要在release的时候在追加上 -w 和 -L 两个参数即可(注意L的大小写),比如:
1 |
rsd release -omwL <span class="pl-c"><span class="pl-c">#</span>压缩、加md5戳、文件监听、浏览器自动刷新</span> |
关于这个小工具 它的原码在 这里。是的,就这么一点点代码,花了大概半小时写完的,因为一切都在 fis 中集成好了,我只是追加几个语言编译插件而已。 from:https://github.com/fouber/static-resource-digest-project
View Details
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 |
var http = require('http'); var moment = require('moment'); process.env.TZ = "Asia/Shanghai"; http.createServer(function (request, response) { var sql = require('mssql'); sql.close(); //连接方式1:"mssql://用户名:密码@ip地址(无需端口号)/SqlServer名/数据库名称" //连接方式2:"mssql://用户名:密码@ip地址:1433(默认端口号)/数据库名称" sql.connect("mssql://sa:s1a2@127.0.0.1/DBNAME").then(function () { new sql.Request().query('select top 10 * from TABLENAME').then(function (result) { response.writeHead(200, { "content-type": "text/html;charset=utf-8;" }); result.recordset.forEach(row => { response.write(row.ID + ' - ' + row.Name + ' - ' + moment(row.DateTime).utc().format("YYYY-MM-DD HH:mm:ss") + "<br>"); }); response.end(); }).catch(function (err) { console.log(err); }); }).catch(function (err) { console.log(err); }); }).listen(8886); |
引用: https://blog.csdn.net/u010668495/article/details/50817136 https://www.npmjs.com/package/mssql https://www.cnblogs.com/cyfhykx/p/6224078.html
View Details