第一节 Yarn 安装前端扩展包
最后更新于:2022-04-02 01:41:58
本节涉及以下目录或文件:
> * node_modules/
> * resources/assets/
> * package.json
Laravel 前端默认 ui 是 [Bootstrap](https://github.com/twbs/bootstrap),本教程将其替换为 [Semantic UI](http://www.semantic-ui.com/)。
[TOC]
## 修改 `package.json` 文件
`package.json` 文件位于项目根目录下。
### 默认版
~~~json
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"axios": "^0.16.2",
"bootstrap-sass": "^3.3.7",
"cross-env": "^5.0.1",
"jquery": "^3.1.1",
"laravel-mix": "^1.0",
"lodash": "^4.17.4",
"vue": "^2.1.10"
}
}
~~~
>[info] 默认集成的 NPM 扩展包:
> 1. bootstrap-sass —— Bootstrap NPM 扩展包;
> 2. jquery —— jQuery NPM 扩展包;
> 3. laravel-mix —— 由 Laravel 官方提供的静态资源管理工具;
> 4. vue —— VUE.js 前端框架;
### 修改后
~~~json
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"axios": "^0.16.2",
"cross-env": "^5.0.1",
"jquery": "^3.1.1",
"laravel-mix": "^1.0",
"lodash": "^4.17.4",
"nprogress": "^0.2.0",
"optimize-css-assets-webpack-plugin": "^3.2.0"
}
}
~~~
>[danger] 修改概要:
> 1. 暂时去除 `vue`,加入 `nprogress`。
> 2. 添加 `optimize-css-assets-webpack-plugin` 用来压缩 CSS。
> 3. 修改去掉 `scripts` 字段中的全部 `cross-env`。因为虚拟机为 Linux 环境,不需要 `cross-env`,否则会各种报错。
## 使用 `Yarn` 安装扩展包
在项目根目录下运行
~~~bash
$ yarn install --no-bin-links
~~~
成功后显示:
~~~bash
yarn install v0.27.5
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
Done in 153.67s.
~~~
### Yarn & NPM 常用命令
|NPM | Yarn | 释义 |
|---|---|---|
| `npm install` | `yarn` | 安装当前项目的所有包 |
| `npm install taco --save` | `yarn add taco` | taco 包被添加到 package.json 的 "dependencies" 中 |
| `npm uninstall taco --save` | `yarn remove taco` | 从项目中移除 taco 包 |
| `npm install taco --save-dev` | `yarn add taco --dev` | taco 包被添加到 package.json 的 "devDependencies" 中 |
| `npm update --save` | `yarn upgrade` | 更新包 |
>[info] 运行时需要用到的包使用 `--save`,否则使用 `--save-dev`。
> 不挂 VPN 或某些报错的情况下,可用 `cnpm` 代替 `npm`。
>[danger] 注意事项:
> 在 Windows 下的 Homestead 虚拟机中,运行 npm 或 yarn 添加移除或更新包时,命令需带 `--no-bin-links`。
> 如果某次执行没有带上,很可能造成包丢失或者其他错误。
### 如遇报错可尝试
1. `Ctrl+C` 停止
2. 清空旧的安装包
* 主机中全局安装 `rimraf`(仅首次)
~~~bash
> npm install -g rimraf
~~~
* 主机中使用 `rimraf` 删除 `node_modules` 文件夹
~~~bash
> cd E:/Homestead/code/Laravel
> rimraf node_modules
~~~
* 虚拟机中执行
~~~bash
$ npm cache clear --force
~~~
3. 重新执行安装命令
~~~bash
$ yarn install --no-bin-links
~~~
## 添加 `semantic-ui` 依赖
~~~bash
$ yarn add semantic-ui --dev --no-bin-links
~~~
安装进行至此,会卡在 `Starting 'run setup'` 这步:
~~~bash
yarn add v0.27.5
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
[1/1] ⠐ semantic-ui: Starting 'run setup'...
[-/1] ⠈ waiting...
[-/1] ⠈ waiting...
[-/1] ⠈ waiting...
[-/1] ⠈ waiting...
~~~
>[warning] 这也是为什么不直接将 `semantic-ui` 依赖写入 `package.josn` 的原因,避免卡住无限制 `waiting`。
`Ctrl+C` 强制退出,手动执行安装:
~~~bash
$ cd node_modules/semantic-ui/
$ gulp install
~~~
安装选项概要:
>[info] 1. 通过上下箭头选择,回车选定。
> 2. 将Semantic UI资源文件安装到 `resources/assets/semantic` 文件夹中。
~~~bash
Starting 'run setup'...
? Set-up Semantic UI (Use arrow keys)
Automatic (Use default locations and all components)
❯ Express (Set components and output folder)
Custom (Customize all src/dist values)
? We detected you are using NPM Nice! Is this your project folder? /home/vagrant/Code/Laravel
❯ Yes
No, let me specify
// 这里设置资源输出目标文件夹
? Where should we put Semantic UI inside your project? (semantic/) resources/assets/semantic/
? What components should we include in the package? (Press to select, to toggle all, to inverse selection)
❯◉ reset
◉ site
◉ button
◉ container
◉ divider
◉ flag
◉ header
(Move up and down to reveal more choices)
? Should we set permissions on outputted files? No
? Do you use a RTL (Right-To-Left) language? No
? Where should we output Semantic UI? dist
·
·
Installing
------------------------------
Installing to resources/assets/semantic/
·
·
Setup Complete!
Installing Peer Dependencies. Please refrain from ctrl + c...
After completion navigate to resources/assets/semantic/ and run "gulp build" to build
~~~
安装完毕后执行以下命令,生成 Semantic UI 的 js 和 css 文件:
~~~bash
$ cd ~/Code/Laravel/resources/assets/semantic/
$ gulp build
~~~
生成完毕后,记得返回项目根目录。
最终,`package.json` 文件中不会添加 `semantic-ui` 依赖,但 `yarn.lock` 文件中已经有相关记录。
如果再次执行最初的添加`semantic-ui` 依赖的命令,则会跳过安装过程直接添加依赖到`package.json` 文件中,提示:
~~~bash
yarn add v0.27.5
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved 1 new dependency.
└─ semantic-ui@2.2.13
Done in 80.53s.
~~~
';