全栈学习:NodeJS与NPM
目录
Node.JS是基于Chrome V8开发的JS服务器端运行环境,NPM则是Node.JS的包管理器。
概述
开发JS应用一般都会选择安装Node.JS进行开发。而安装过程中,也会一并安装NPM(Node Package Manager)。使用NPM能够方便的进行包的管理,项目开发、发布。
NPM实用总结
- 项目结构
目录/文件 内容 /build/ 构建目标、构建脚本 /config/ 一些配置脚本 /node_modules/ 本地安装的包 /src/ 源代码 /static/ 静态资源文件 .babelrc babel配置文件 index.html 生成的首页入口 package.json 项目配置 package-lock.json npm5后添加,用于锁定版本号 注:版本号约定X.Y.Z。X代表大变动,不向下兼容;Y代表新功能,但向下兼容;Z代表bug修补。注意package-lock将会完全锁定版本,不会自动更新。如果没有该文件,则会自动更新同一个X下的最新版本。
- 重要配置
- 实用命令
命令 含义 npm install xxx 安装包xxx到当前项目 npm install xxx -g 安装包xxx到全局环境 npm install npm -g 升级npm npm list -g 查看全局安装的包 npm uninstall xxx 删除包 npm search xxx 搜索包 - 镜像
- 使用cnpm
# 指定从淘宝镜像下载、安装cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org # 此后一直使用cnpm代替npm cnpm install xxx
- 使用淘宝镜像
# 单次使用 npm install xxx --registry=https://registry.npm.taobao.org # 永久配置 npm config set registry https://registry.npm.taobao.org # 还原 npm config set registry https://registry.npmjs.org/
- 注意:cnpm和npm的区别
- 本质上都是一种包管理器,而cnpm原生使用国内的镜像
- cnpm和npm无法完美混用,可以的情况下尽量使用npm,配置有效的镜像
- 使用cnpm
一些库:
d3
- 概述:一个非常强大的数据可视化库,能够绘制各种矢量的柱形图、饼状图,并且具有非常丰富的交互能力
- 以D3在Github上的Api Reference为准,其他教程均有可能落后(比如d3.layout中的各种布局已经拆分到各个库中,该包不再存在)
- 参考:
babel
- 概述:目的是通过ES6到ES5的翻译,让ES6项目也能用于不支持ES6的浏览器
- 参考:官方文档
vue
- 概述:一个前端框架,支持双向绑定等
- 参考:
electron
- 概述:一个用于生成跨平台程序的node.js库。分为主进程(main.js),渲染进程(各种html)
- 进程间通信:electron内最重要的事情之一,就是主进程到渲染进程之间的通信。这个通信一般使用ipcMain、ipcRenderer来完成,详见参考中的官网链接。需要注意的是只有在加载某个页面时指定preload文件,才能将通信的函数正常配置,区分node环境和浏览器环境,preload还是node环境,但是页面和页面引用到的js都是浏览器环境了。
- 实用工具:
- electron-forge:一个混合多种功能的cli,可以用于打包
- electron-package:打成安装包的工具,打包功能稍弱
- electron-builder:打成安装包的工具,打包功能更为强大
- 注意:
- npm设置代理或镜像的方式都不够稳定,怎么解决?最终推荐方案,参考设置代理解决 npm 下载安装 Electron 慢的问题
# linux下 export ELECTRON_GET_USE_PROXY=1 #设置为 1 或 true # export GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:1080 # export GLOBAL_AGENT_HTTPS_PROXY=http://127.0.0.1:1080 # windows下 set ELECTRON_GET_USE_PROXY=1 #设置为 1 或 true,主要是这一句 # set GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:1080 # set GLOBAL_AGENT_HTTPS_PROXY=http://127.0.0.1:1080
此外,在
~/.npmrc
中可以设置代理,例如proxy = "socks5://127.0.0.1:23456"
但以上配置对electron-builder仍然无效,在第一次build时,会拉取所需的打包依赖,见下一条。
- electron-builder据说可以设置ELECTRON_MIRROR环境变量,未验证是否真的有效。否则builder也经常去拉github上的资源,容易失败。
# windows下 set ELECTRON_MIRROR="https://npm.taobao.org/mirrors/electron/"
- files设置的打包时所需打包的文件,但是注意路径需要有一些变化。最好是通过from、to的方式指定清楚。
- ASAR文件存在一些限制,这其中最明显的是ASAR是只读的,因此不能将需要运行时修改的文件打包,此时应当使用"asarUnpack"选项,指定不想被打包的文件,这种方法主要用于增量更新。
但此时也存在一些安全性问题,对于js,在必要时可以使用混淆工具进行处理
- linux下图标最好使用icns文件指定
- linux下以deb包安装会出现权限问题,默认都是root文件,无法进行修改(比如动态调整配置文件)。个人认为最好的办法是将配置文件复制到用户目录下进行使用。
- npm设置代理或镜像的方式都不够稳定,怎么解决?最终推荐方案,参考设置代理解决 npm 下载安装 Electron 慢的问题
- 项目文件参考
// package.json
{
"name": "MyApp",
"version": "1.0.3",
"description": "some description",
"homepage": "https://your.home.page",
"author": "RexLyc <balabala@mail.com>",
"main": "main.js",
"scripts": {
"start": "electron .",
"build": "electron-builder"
},
"build": {
"appId": "com.lyclife.myapp",
"productName": "MyApp",
"asar": true,
"asarUnpack": [
"./main.js" // 这里说明main.js在运行时会变更,因此需要从asar中脱离出来
],
"win": {
"target": [
{
"target": "nsis",
"arch": [
"ia32"
]
}
],
"icon": "favicon.png"
},
"nsis": {
"oneClick": true
},
"linux": {
"target": [
{
"target": "deb",
"arch": [
"x64"
]
}
],
"icon": "icon.icns"
}
},
"devDependencies": {
"electron": "^20.3.8",
"electron-builder": "^23.6.0"
},
"dependencies": {
"check-network-status": "^1.2.3"
}
}
- 参考:
- ElectronJS中获取GPU信息
- Electron使用electron-builder打包流程
- electron-builder打包优化
- electron打包优化之路
- Electron 打包优化
- 使用electron-builder在windows上打包并自动更新
- 官网:Electron 进程间通信
- Python + Flask + Electron 混合开发入门 (项目演示)
- Electron无法从淘宝镜像下载安装,报错HTTPError Response code 404 (Not Found)的问题
- 高阶篇 01:实现 npm script 跨平台兼容
- Electron跨平台开发指南-更新管理
Node.JS实用总结
- 版本变更