知识储备
操作系统
-
内核(kernel):指大多数操作系统的核心部分,它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成
- .dll/.so:动态链库
- .lib/.a:静态链库
-
外壳(Shell): 命令行解释器,执行用户输入的命令并返回结果
- cmd(Command Shell)
- powershell(Windows平台推荐使用)
- zsh
- bash
-
终端(Terminal): 文本输入/输出环境
传统意义上的终端
现代终端模拟器
Shell命令结构
-
[命令名] [子命令,[子命令,...]] [-参数简写] [--参数全写] [输入内容]
-
举个栗子
[命令名] sass
[参数简写] v // 这里v是version简写,意义为查看版本号
sass -v
[命令名] npm
[子命令] run // 子命令,代表运行...
[输入内容] serve // 其中这个输入内容来源于package.json文件的script字段中,如果不存在则错误
npm run serve
命令行基本都是带有语义的,如果你能很清楚这些那么使用起来将更轻松,甚至不用硬背就可以熟练掌握技巧
常用Shell命令
- 查看命令所在路径
// cmd
where [CommandName]
// powershell
gcm [CommandName]
- 查看命令的使用方法和参数
// cmd/powershell原生指令或者系统命令行(CLI)程序
[CommandName] /?
// 类linux类应用程序(这种属于在各种shell中用法一致,第三方开发,如node)
[CommandName] -h
or
[CommandName] --help
- 打开指定路径或启动程序
start [Path]
- 查看系统环境变量
// cmd,PATH属于特殊环境变量,它记录了当使用一个命令时会去哪里寻找匹配的可执行程序
echo %PATH%
// powershell
$env:PATH
路径
- . : 当前路径
- .. : 上一级路径
- / : 路径分隔符
- C:// : 盘符标识,这里举例选用C盘
Node CLI使用指北
nvm(node version manager)
nodejs的版本管理工具
- 使用nvm可以更加方便的管理node版本,同时解决win10操作系统下在Program Files文件夹中软件没有权限导致的错误,当然我们可以通过为Program Files文件夹直接附权解决,但是没有nvm使用的优雅
安装
由于nvm是为Linux平台开发的,所以windows平台使用要下载nvm-windows版本,而不是直接下载nvm
常用命令
- 安装指定版本的node,可以安装多个不同版本
nvm install [NodeVersion]
// 推荐安装node16.15.0版本,对于pnpm支持良好
nvm install 16.15.0
注意:如安装缓慢,可以考虑更换淘宝源
- 查看主机所有安装的node
nvm ls
- 切换当前主机使用的node,注意这个版本必须是之前安装好的
// 切换完毕后在执行查看,你会发先这个版本前面有*号,代表切换成功了
nvm use 16.15.0
node -v
npm(node package manager)
传统且早期的node包管理器,存在一系列诟病问题且目前版本中没有完美解决幽灵依赖和node_modules体积过大碎片化等问题
替代方案:
- yarn
快速、可靠和安全的 JavaScript 依赖管理工具
npm install -g yarn
- pnpm
速度快、节省磁盘空间的软件包管理器,解决了幽灵依赖减少了node_modules体积过大问题
npm install -g pnpm
常用命令
- 安装指定包
// 当前项目安装
npm install [PackageName]
// 安装到当前项目,同时作为开发依赖而不是生产依赖
npm install [PackageName] -D
// 全局安装
npm install [PackageName] -g
// 项目依赖还原
npm install
这些包可以通过npm官网进行查找到,同时你也可以在github中寻找有用的包,有的时候你或许需要不安装或者不下载就使用对应的包内容(即时开发),这时候你可以使用 unpkg.com/[PackageNam…] 该网站进行快速的包CDN引入,甚至有些包只提供了commonjs规范的导出而你想要依赖于浏览器原生的ESM规范做导入,那么你可以使用 www.skypack.dev/[PackageNam…] 做导入,该网站不但提供CDN服务,同时会自动转换模块规范为ESM
- 查看全局安装了多少包
npm list -g --depth=0
- 查看当前NPM所有配置
npm config list
- 修改某一项配置,如更换淘宝源
npm config set registry="https://registry.npm.taobao.org/"
- 获取某一项配置的值
npm config get registry
- 移除安装的包
// 移除本地项目安装的包
npm uninstall [PakcageName]
// 移除全局安装的包
npm uninstall [PakcageName] -g
- 初始化一个项目
这里注意只要目录下有
package.json
文件,那么它就是一个前端工程化项目
// 初始化前端项目,实际是创建了一个package.json文件而已,-y参数是代表不询问直接搞
// 如果熟悉package.json中字段含义,手动创建一个效果相同
npm init -y
nrm(npm registry manager)
npm的镜像源管理工具
npm更换淘宝源确实很快,但是如果当你想要把自己的库文件发布到npm上面时候你就会发现会报错,原因是推送地址不是npm官方而是一个镜像,这个时候我们需要把源切回来,但是有可能这个操作重复频率还挺高,那么无论是输入源地址还是记录这个地址都是心智负担,所以通过nrm命令方式可以快速切换npm仓库源
安装
npm install -g nrm
常用命令
- 查看包含的可切换源
nrm ls
- 切换源
// 切换淘宝源
nrm use taobao
// 切换npm源
nrm use npm
npkill
安全快速的清理电脑上的 node_modules
随着时间推移即便是强如pnpm的这样快速的包管理器也无法经受Windows中的node_modules的摧残
这里为什么重点强调Windows操作系统呢因为它的NTFS磁盘格式对文件删除时进行过分检查造成删除缓慢问题,而想linux和macos使用的磁盘文件系统如APFS这类,可以实现秒删,那么Windows就无解了么,其实并不是我们只要跳过系统检查就行,换句话说不要通过鼠标删除,而是通过编程方式,好在社区已经提供了不错的工具,那就是npkill
安装
npm install npkill -g
常用命令
- 执行npkill上下选择想要删除的node_modules然后按空格,你会发现世界瞬间清净
cd ./projectPath
npkill
@antfu/ni
由于有的老项目使用的是vue2,但是pnpm+vue2这个组合会让一些IDE失去提示功能,所以推荐yarn+vue2,这样就会造成新老项目的来回切换包管理命令,导致人的混乱,@antfu/ni
解决了一问题
将不同包管理器命令统一并简化,自动判断当前项目使用的包管理器
常用命令
- 还原包
ni
- 安装指定模块
ni [packageName]
Vue项目搭建指北
好了,到这里我想对于node,npm这样的命令已经不再陌生了,那么我们可以开始搞事情了
抛开脚手架徒手搭建Vue3项目
-
分析vue脚手架@vue/cli为我们做了什么,说到这里就不得不提到一个问题,就是@vue/cli安装后使用的指令确是vue能,实际上包安装后可以使用的CLI命名或者说能不能使用CLI访问并不是包的命名决定的,而是存放在该包中的package.json中bin字段,所以我们通过
npm install @vue/cli -g
安装vue脚手架以后使用的命令行却是vue
@vue/cli常用命令
- 创建一个指定命名的vue项目
vue create [proejctName]
- 启动可视化的web页面进行可视化的项目管理
vue ui
@vue/cli-service
好了,到此为止,@vue/cli 已经没有任何价值,我们开始抛开它搭建我们的vue项目
什么是 @vue/cli-service
?
答:service for vue-cli
根据这个包我们知晓了,原来提供vue核心服务的是 @vue/cli-service
服务包括:
- 提供开发服务器,热更新等功能可以实时预览
- 打包输出浏览器可识别文件
- 编译.vue(通过vue-loader)输出js,css等
那么 @vue/cli 又做了什么能
- 根据项目模板生成项目放到当前文件夹中
似乎 @vue/cli 做的这个事情我也能做( •̀ ω •́ )y
开始搭建
- 初始化前端项目
npm init -y
- 安装依赖包
npm i @vue/cli-service -D
npm i vue -D
- 创建src/main.js(@vue/cli-service默认入口文件是这个,可以通过vue.config.js进行配置)
// src/main.js
console.log('hello');
- 运行 @vue/cli-service 启动服务,这个包提供的CLI命令行名称是vue-cli-service
这里使用npx,由于命令行是本地项目安装不存在于全局系统环境,导致我们直接输入名称无法运行,但是node提供了npx使用该命令会自动在当前项目的node_modules下寻找存在的命令。注意:如果在集成环境终端中是不存在这个问题,或者加入到package.json的scripts中执行同样不存在上述问题
npx vue-cli-service serve
这是我们成功运行并且在控制台输出了hello,但是这样还不是vue项目呀,其实vue不也是js代码么有什么奇怪的,我们可以在main.js中随意输入内容啊,可以操作DOM加入一个div,先不要急着引入vue,让我们尝试操作一下DOM加入一个方块
// src/main.js
let div=document.createElement('div')
div.style.cssText ='width:100px;height:100px;background-color:red;'
document.body.appendChild(div)
加了三句操作DOM加入一个方块div屏幕显示一切正常,very good!
重点:接下来我们应该把这段代码更改为vue代码了,对了,vue需要挂载到一个 dom 对象上,这个不用担心,@vue/cli-service 默认的html模板里面是包含了一个根div的,想这样
<div id="app"></div>
那么我们只要在写入vue代码时候选择挂载对象是这个id=app的div对象元素就可以了
// src/main.js
import {createApp, h} from 'vue'
let app = createApp({
render: ()=>h('div', null, 'hello')
})
app.mount('#app')
成功输出hello,但是render是啥呀,这和我平时写的vue文件不同呀,其实vue模板编译过后就是这种手动创建vnode的格式,我只是直接写出来了而已,这个不用关心,我们继续改造
- 创建src/App.vue
<template>
<div>{{ msg }} Vue3</div>
</template>
<script>
import {defineComponent, ref} from 'vue'
export default defineComponent({
setup() {
let msg = ref('hello')
return {
msg
}
}
})
</script>
- 修改src/main.js
import {createApp, h} from 'vue'
import App from './App.vue'
let app = createApp(App)
app.mount('#app')
很神奇,这不就是我们平时写的vue项目么,那么最后在优化一下,在package.json加入scripts字段
- package.json
"scripts": {
"serve": "vue-cli-service serve"
}
- 命令行运行
npm run serve
完美~