工程化开发和脚手架(旧)
工程化开发和脚手架
脚手架Vue CLI
npm 是 NodeJS 下的包管理器,vue-cli脚手架模板就是基于 node 下的 npm 来完成安装的。
webpack: 它的主要用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资源的合并和打包。
vue-cli:官方提供的一个脚手架,用于快速生成一个 vue 的项目模板
使用步骤
右键菜单打开终端管理员,进入后开始:
1.全局安装(只需安装一次即可) yarn global add @vue/cli 或者 npm i @vue/cli -g
- 查看vue/cli版本: vue –version
- 创建项目架子:vue create project-name(项目名不能使用中文)
- 启动项目:yarn serve 或者 npm run serve(命令不固定,找package.json)
安装过程
我安装的是npm,但是直接输入全局安装指令没成功,于是
先在下载Node的文件夹下面建了两个文件夹node_global和node_cache
然后cmd输入:
C:\Users\Administrator>npm config set prefix “D:\Pragram\node-v20.17.0.msi\node_global”
C:\Users\Administrator>npm config set cache “D:\Pragram\node-v20.17.0.msi\node_cache”
C:\Users\Administrator>npm config set registry https://registry.npm.taobao.org
C:\Users\Administrator>npm config get registry
C:\Users\Administrator>npm config list
然后配置系统环境变量
然后npm install -g @vue/cli
但是报错
C:\Users\Administrator>npm install -g @vue/cli
npm ERR! code CERT_HAS_EXPIRED
npm ERR! errno CERT_HAS_EXPIRED
npm ERR! request to https://registry.npm.taobao.org/@vue%2fcli failed, reason: certificate has expired
npm ERR! A complete log of this run can be found in:
npm ERR! D:\RunSoftware\nodejs\node_cache_logs\2024-09-04T13_04_05_644Z-debug-0.log
于是我换了一个源:npm config set registry https://registry.npmjs.org/
不行,继续换
npm config set registry https://mirrors.cloud.tencent.com/npm/
继续npm i @vue/cli -g
还是报错,但是这次起码很快而且有显示再跑,报错内容:
C:\Users\Administrator> npm i @vue/cli -g
npm ERR! code FETCH_ERROR
npm ERR! errno FETCH_ERROR
npm ERR! invalid json response body at https://mirrors.cloud.tencent.com/npm/electron-to-chromium reason: Invalid response body while trying to fetch https://mirrors.cloud.tencent.com/npm/electron-to-chromium: read ECONNRESET
npm ERR! A complete log of this run can be found in:
npm ERR! D:\RunSoftware\nodejs\node_cache_logs\2024-09-05T03_48_41_073Z-debug-0.log
有时候,清除 npm 缓存可以解决问题
npm cache clean –force
我重新安装了新版的node.js
更新完 Node.js 后,运行以下命令以安装最新的 npm:
npm install -g npm
然后npm install -g @vue/cli
终于成功了!!!!
然后 npm i @vue/cli -g
成功后vue –version
开始我没有成功输出版本号,因为我的环境变量有问题
npm root -g
把这个输出的值加到环境变量里面去,如果这个输出失败那就是node.js的文件夹路径没有正确放到环境变量里,加进去就好
创建项目启动项目过程
在终端输入 vue create xiangmuming
其中xiangmuming输入什么那么这个项目文件就会命名什么,不能是中文命名
注意在哪里的终端创建,项目就会被创建在哪里
也可以管理员运行vscode,然后在这里的文件夹下面右键终端运行输入命令创建
然后在选项中选择vue2(此时在学)
然后会生成一个你命名的文件夹,里面有很多文件目录,给你搭好了架子
但是!我又出问题了,显示vue : 无法加载文件 D:\Pragram\node-v20.17.0.msi\node_global\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/
?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
- vue create domo1
+ CategoryInfo : SecurityError: (:) [],PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess 解决办法:管理员运行终端然后输入 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser Get-ExecutionPolicy -List npx vue create demo1 成功进入选择界面~ 选择后 Vue CLI v5.0.8 ✨ Creating project in D:\Pragram code\webFront\web-front-end\vue\03vuecli\demo1. ⚙️ Installing CLI plugins. This might take a while... 等一会儿会建好 启动项目: 先进入你创建的文件夹目录,然后再输入 npm run serve 成功后会显示 DONE Compiled successfully in 3407ms 15:48:28 App running at: - Local: http://localhost:8080/ - Network: http://10.20.54.212:8080/
进入local网址成功显示就证明项目运行成功
注意,npm run serve的serve是根据package.json里面的 “scripts”: {
“serve”: “vue-cli-service serve”,}
其中的serve决定的,如果别的项目这里不是serve,就改成对应的东西
项目目录介绍
脚手架中的文件有很多,三个重要文件:
- main.js 入口文件
- App.vue App根组件
- index.html 模板文件
组件化开发
写在前面
在一个建立好的demo文件中,要展现多个前面页面或者例子,不要没换一个就新建一个demo,直接把原有的src文件夹复制一个重命名,然后删了之前的src文件夹新建一个src文件夹,在src文件夹里面写新的页面或者新的例子。可以有多个src的复制保存版,但是叫src的必须只有一个,也只会运行叫src的文件夹里的东西
src文件夹包含components文件夹,App.vue文件,main.js文件
快速生成三个部分快捷键:<vue 选择第一个点击会自动生成框架
vue2只能有一个根组件(只能有一个最大的盒子,不能有两个一样大的盒子并列放),vue3可以
组件名遵循大驼峰命名法
组件化和根组件
组件化:一个页面可以拆分成一个个组件,每个组件有着自己独立的样式、结构、行为
好处:便于维护,利于复用,提升开发效率
根组件:整个应用最上层的组件,包裹所有普通小组件(可以理解成最外边最大的盒子)
App.vue单文件组件的组成
分为三个部分:结构,行为,样式(不一定三个都有,也可以只有一个)
template:结构 (有且只能一个根元素)
script: js逻辑
style: 样式 (可支持less,需要装包)
让组件支持less
(1) style标签,lang=”less” 开启less功能
(2) 装包: yarn add less less-loader -D 或者npm i less less-loader -D
普通组件的局部注册
理解:把一个页面分成多个部分(多个小盒子),把这个页面的每一个部分单独建一个.vue文件都放到components文件夹里,每一部分对应的.vue文件里面写这个文件的三个部分(结构,行为,样式)。在components文件夹同级的App.vue文件中导入并注册每个部分的.vue文件,直接使用引用文件的变量名即可把每一部分的内容放到页面里面(把小盒子导入到大盒子里面)
当成html标签使用即可 <组件名></组件名>
局部注册特点:只能在注册的组件内使用
示例代码
1 | App.vue文件 |
普通组件的全局注册
如果局部注册是在一个大盒子里放多个小盒子,那么全局注册就是有一个东西所有的小盒子都想用(比如按钮),那么要在main.js中进行全局注册
全局注册特点:所有组件内都能使用
进行全局注册 → 在所有的组件范围内都能直接使用
Vue.component(组件名,组件对象)
注意一次只能导入一个,没有s
导入文件代码要写在顶部,这是规范
在导入的文件最后加不加.vue都可以,有时候自动补全.vue有时候没有都没关系
代码例子 main.js
1 | // 文件核心作用:导入App.vue,基于App.vue创建结构渲染index.html |
组件进阶
scoped解决组件的样式冲突
理解:在样式style中,默认是全局样式,就是一个局部样式的style也会影响所有组件,一个局部组件设置的div样式会影响到其他组件里面的div,一般是不希望这样的,所以有了scoped这个设置,让局部样式只能作于与它对应的局部组件
使用方法:在局部组件的.vue文件中的style标签后面加scoped,变成