标签: Nodejs

Nodejs 升级怎么保留全局安装的包

rt, 今天用 fs/promises 报错,发现是 nodejs 版本低了。于是下载*新 lts 版本 zip,打算直接解压覆盖,仔细一看发现 npm 全局安装的包生成的命令都在 NODEJS_HOME/node_modules/npm 目录里面, 就保留了 node_modules 只覆盖了 node.exe npx 等文件。

nodejs 是升级成功了 ,但 npm 就不干了 npm WARN npm npm does not support Node.js v14.17.3 *后清空目录,解压进去好了,全局命令以后缺了再装。

想问问各位大佬,你们 nodejs 是怎么升级的,有没有办法保留这些全局包(命令)

还有 nodejs 在服务器上部署时怎么限制 npm 配置路径,服务器是多人共享 root 的,怕影响到其他人,所以全局包(例如 pm2)要装到项目目录里面,看文档.npmrc 的搜索路径,/root/.npmrc 是肯定会被读到的,不知道有没有什么好办法解决

npm Nodejs 全局 npmrc11 条回复 • 2021-08-04 22:34:13 +08:00
zzk1989 1
zzk1989 42 天前
npx 可以指定 node 版本,不影响全局
$ npx -p node@0.12.8 node -v

如果你有一系列东西,可以单独封装起来,提供一个”bin”命令就可以了
比如我就封装了一个 vite vue2 的打包环境,全局安装一次就可以在其他项目里面使用了
coffeedeveloper 2
coffeedeveloper 42 天前 ❤️ 1
用 nvm https://github.com/nvm-sh/nvm,然后安装的使用 –reinstall-packages-from 参数
noe132 3
noe132 42 天前
不使用全局包 / 使用 docker 部署
lc1450 4
lc1450 42 天前
@zzk1989 @coffeedeveloper 好的,谢谢 有空试试

@noe132 是个好办法, 谢谢了
libook 5
libook 42 天前
npm 自己其实也是被当做一个包放在全局的 node_modules 下的,你可以把新版的 npm 覆盖过去。

另外一直在 MacOS 和 Linux 下用 nvm:
nvm install 新版本号 –reinstall-packages-from=旧版本号
可以做到连着全局包一起迁移过去。
几年前尝试过在 Windows 上用 nvm 无果,nvm 本身实际是个 Shell 脚本,原版不能在 Windows 上用,有个 nvm-windows,不知道现在是否好用。
dfkjgklfdjg 6
dfkjgklfdjg 42 天前
使用 NVM 来管理,然后指定一下全局安装目录就好了,我是直接指定到一个外部目录,然后不管怎么切换版本都全局依赖都不会丢。
dengshen 7
dengshen 42 天前 via iPhone
Mac ?用 n 来管理版本
Jirajine 8
Jirajine 42 天前 via Android
可以看看 volta,像 rustup 一样管理 node 环境。
threeEggs123 9
threeEggs123 42 天前 via Android
借个楼问一下,node 12.x 版本,create-react-app,npm run start 后,cpu 直接蹦到一百,依赖就是那些 ts,antd,谷歌都没有找到解决方案,怎么定位问题呢。cpu 高,内存没多少。
zhaihaoxyz1 10
zhaihaoxyz1 41 天前
可以使用容器管理

magicdawn 11
magicdawn 15 天前
几年前看到了知乎安利 nvs, 就是看中了每次升级不用重新安装所有 global modules

https://zhuanlan.zhihu.com/p/63403762

npm config set prefix ~/.npm-global

nodejs 怎样优雅的依赖同个模块的俩个版本?

##起因##

用的 vue.js +elementui, 然后想用新版本的 datepicker 组件,其他的用旧版本。新版本已经有已知的 bug 了,不适合全局用。

##问题## 所以想问下如何同时引用俩个版本的模块?其中一个版本其实只要一个组件。

##已经尝试的方案## 用 npm i element-ui-latest@npm:element-ui 这个命令可以让新旧版本同时存在,并且引用,但是引用的时候出错。原因是 datepicker 这组件的引用有用到 element-ui这个模块前缀,而不是全用相对位置。

第 1 条附言 · 17 天前
看来没啥好办法,曲线救国了一下。
全局用新版本,有 bug 的组件用了旧版本。 向旧兼容没出现问题
版本 引用 DatePicker element-ui8 条回复 • 2021-07-27 10:23:54 +08:00
chaoFanExcellent 1
chaoFanExcellent 17 天前
你把新版本的 datepicker 看源码自己写一个组件,其他的用旧版本就行了
JustLookBy 2
JustLookBy 17 天前
@chaoFanExcellent 啊这优雅嘛?
libook 3
libook 17 天前
如果每个组件之间互相独立,那么你可以直接把相应组件的代码复制到本地项目里,重命名成另一个组件名。

如果组件之间耦合较高,那么可以了解一下微前端。

*优雅的方式是只用一个版本。
renmu123 4
renmu123 17 天前 via Android
旧版本的 bug 不比新版本多?
Jeremial 5
Jeremial 17 天前
yarn 的别名了解一下?
A 模块版本 1, 同时给 A 模块起一个别名 B, 使用版本 2
Jeremial 6
Jeremial 17 天前
@Jeremial #5
官方文档 https://classic.yarnpkg.com/en/docs/cli/add/#toc-yarn-add-alias
https://til.hashrocket.com/posts/oxmc7kencg-alias-an-npm-package-with-yarn-add
JustLookBy 7
JustLookBy 17 天前
@libook 耦合度太高了,不好 copy,我是在已有项目上加个小功能而已,微前端应该不适用?
@renmu123 项目是旧版本搭建的,没啥 bug?。

@Jeremial 你这个和我尝试的那个方案是一样的 `npm i element-ui-latest@npm:element-ui`,行不通
wednesdayco 8
wednesdayco 17 天前
“两个版本”这底子就不优雅了,不如把老版本升级?

Nodejs搭建web服务器

使用Nodejs + http 创建web服务器
1、首先创建一个server.js文件,创建服务器,以及对应css和js文件的引入和判断
var http=require(‘http’);
var fs = require(‘fs’);
var url = require(‘url’);

//创建服务器
http.createServer(function(request,response) {
//解析请求,包括文件名
var pathname= url.parse(request.url).pathname;
//输出请求的文件名
console.log(“Request for “+ pathname + ” received.”);
//获取后缀,判断是js还是css文件,如果目录结构不同,此处需要修改
var firstDir = pathname && pathname.split(‘/’)[1];
var ContentType = {‘Content-Type’: ‘text/html’};

// js – application/x-javascript
if (firstDir && firstDir === ‘static’) {
ContentType = {‘Content-Type’: ‘text/css’};
}
if (firstDir && firstDir === ‘js’) {
ContentType = {‘Content-Type’: ‘application/x-javascript’}
}

//从文件系统中去请求的文件内容
fs.readFile(pathname.substr(1),function(err, data) {
if(err) {
console.log(err);
//HTTP 状态码 404 : NOT FOUND
//Content Type:text/plain
response.writeHead(404, {‘Content-Type’: ‘text/html’});
}
else {
//HTTP 状态码 200 : OK
//Content Type:text/plain
response.writeHead(200, ContentType);

//写会回相应内容
response.write(data.toString());
}
//发送响应数据
response.end();
});
}).listen(8080);

console.log(‘Server running at http://127.0.0.1:8080/’);

2、 创建一个简单的html页面 ,此处是两个边框,然后是一个表格,并在第二个边框添加上一个点击事件,
作为引入另一个js文件

<!–

3、css样式文件和上面写的style标签内容一样
body {
border: 1px solid blue;
}

div {
border-radius: 10px;
width: 400px;
height: 200px;
border: 2px solid yellow;
}

4、这个是js文件
console.log(’-成功引入js文件-’);
function onClickDiv () {
alert(‘second点击事件’);
}

整体上就这么多了!详细的都有注释,大家可以自己看看,相对上也比较简单,具体步骤我也简单说下:

1、下载安装nodejs,官网就可以了,此处使用的是http,也有的例子使用的是express(需要在nodejs中下载,
详细的自己可以百度下看看)
2、进入到此项目中js文件那层目录,执行node server.js(此处取名为server,具体看自己的名称)
3、执行成功会打印服务器启动,并显示ip和端口号
4、打开浏览器http://127.0.0.1:8080/index.html即可查看效果

*后上图:
%title插图%num %title插图%num

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速