Laravel-China 教程 学习笔记
1. 环境搭建
简略步骤
- 安装 VirtualBox
- 安装 Vagrant
- 导入 Homestead Box 虚拟机盒子
- 安装 Git
- 安装 Homestead 管理脚本
- 配置 Homestead.yaml 文件
- 启动 Homestead 虚拟机
导入 Homestead Box 虚拟机盒子
下载Homestead 虚拟机盒子, 解压后运行命令
vagrant box add metadata.json
安装 Homestead 管理脚本
使用git-bash运行
cd ~
git clone https://git.coding.net/summerblue/homestead.git Homestead
cd Homestead
git checkout v7.8.0
bash init.sh
2. 解决 Windows 系统使用 Homestead 运行 Laravel 本地项目响应缓慢问题
参考 Speeding up Homestead on Windows Using NFS
a. Install NFS Plugin
vagrant plugin install vagrant-winnfsd
b. Update homestead.rb
There is some weird bug here, not sure why it hasn’t been pushed into the main repo yet, but you will need to replace some code here (if not already live).
homestead/scripts/homestead.rb
Replace the following:
if settings.include? 'folders'
settings["folders"].each do |folder|
mount_opts = []
if (folder["type"] == "nfs")
mount_opts = folder["mount_opts"] ? folder["mount_opts"] : ['actimeo=1']
end
config.vm.synced_folder folder["map"], folder["to"], type: folder["type"] ||= nil, mount_options: mount_opts
end
end
With this:
if settings.include? 'folders'
settings["folders"].sort! { |a,b| a["map"].length <=> b["map"].length }
settings["folders"].each do |folder|
config.vm.synced_folder folder["map"], folder["to"],
id: folder["map"],
:nfs => true,
:mount_options => ['nolock,vers=3,udp,noatime']
end
end
c. Update Homestead.yaml
We can now use nfs in the folders section of the homestead config file.
folders:
- map: ~\projects
to: /home/vagrant/Code
type: nfs
d. 重启homestead
vagrant reload
e. 注意事项
执行vagrant halt
后,winnfsd
仍然在运行,有时导致 rm: cannot remove '<FILENAME>': Input/output error
错误,参考 https://github.com/winnfsd/vagrant-winnfsd/issues/105,停止虚拟机后手动杀一下 winnfsd.exe
进程即可。
3. 镜像加速
参考 https://laravel-china.org/composer
composer config -g repo.packagist composer https://packagist.laravel-china.org
yarn config set registry https://registry.npm.taobao.org
npm config set registry https://registry.npm.taobao.org
4. 创建项目
composer create-project laravel/laravel your-project-name --prefer-dist "5.7.*"
composer install
yarn install --no-bin-links
5. 解决 yarn install
问题
打开 pakage.json
, 去掉4处 cross-env
{
"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 --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
}
}
6. 解决 /home/vagrant/code/sample/node_modules/pngquant-bin: Command failed.
问题
错误详情:
error /home/vagrant/code/sample/node_modules/pngquant-bin: Command failed.
Exit code: 1
Command: node lib/install.js
Arguments:
Directory: /home/vagrant/code/sample/node_modules/pngquant-bin
Output:
⚠ The `/home/vagrant/code/sample/node_modules/pngquant-bin/vendor/pngquant` binary doesn't seem to work correctly
⚠ pngquant pre-build test failed
ℹ compiling from source
✔ pngquant pre-build test passed successfully
✖ Error: pngquant failed to build, make sure that libpng-dev is installed
解决方法:
wget -q -O /tmp/libpng12.deb http://mirrors.kernel.org/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1_amd64.deb && sudo dpkg -i /tmp/libpng12.deb && rm /tmp/libpng12.deb
yarn install --no-bin-links
7. Composer Update Fails due to Github Authorization
Composer Update Fails due to Github Authorization
8. 配置信息
- 修改
.env
的APP_NAME
为项目名称 - 修改
.env
的APP_URL
为项目URL - 修改
config/app.php
的timezone
为上海时区:'timezone' => 'Asia/Shanghai',
- 修改
config/app.php
的locale
为中文:'locale' => 'zh-CN',
9. 代码同步
使用homestead虚拟机编写代码并测试,git push
,生产环境 git pull
,但生产环境的目录 /var/www/project-name
一般是属于www-data
用户的,很难使用 git ssh
协议,必须使用 git https
协议即 origin
必须为https://github.com
开头,不能使用 [email protected]
开头,这样就每次 git pull
的时候都要输入github
的用户名和密码,很麻烦。网上查到这个 How to enter command with password for git pull?,
git config credential.helper 'cache --timeout=3600'
可以在一小时内免去重复输入。
10. composer 组件汇总
-
composer require dingo/api:2.0.0-alpha2
构建 RestFul Api 的工具包首次运行会报错,修改
composer.json
,添加两行:"minimum-stability" : "dev", "prefer-stable" : true
保存后再次运行
composer require dingo/api:2.0.0-alpha2
即可。将 dingo 的配置文件 publish 出来到
/config/api.php
:php artisan vendor:publish --provider=Dingo\Api\Provider\LaravelServiceProvider
编辑
.env
:API_STANDARDS_TREE=prs API_SUBTYPE=larabbs API_PREFIX=api API_VERSION=v1 API_DEBUG=true
-
composer require doctrine/dbal
修改数据表字段的属性 -
composer require liyu/dingo-serializer-switch
DingoApi的数据中间件,用来切换ArraySerializer
和DataArraySerializer
安装成功后,在路由文件
Route/Api.php
修改:. . . $api->version('v1', [ 'middleware' => 'serializer:array' ], function ($api) { . . .
增加中间件
serializer
,参数为array
-
composer require guzzlehttp/guzzle:~6.0
Guzzle PHP HTTP Client -
composer require "barryvdh/laravel-debugbar:~3.1" --dev
生成配置文件,存放位置
config/debugbar.php
:php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"
打开
config/debugbar.php
,将enabled
的值设置为:'enabled' => env('APP_DEBUG', false),
修改完以后, Debugbar 分析器的启动状态将由 .env文件中 APP_DEBUG 值决定。
参考Easy way to disable debugbar on certain routes / groups / controllers, 可以在控制器内添加如下语句暂时禁用
debugbar
:app('debugbar')->disable();
11. 解决执行 composer install
时 无法删除文件的错误
错误描述:
Removing easywechat-composer/easywechat-composer (1.2.0)
[RuntimeException]
Could not delete /home/vagrant/code/wx-server/vendor/easywechat-composer/easywechat-composer/src/Commands:
Exception trace:
() at phar:///usr/local/bin/composer/src/Composer/Util/Filesystem.php:217
Composer\Util\Filesystem->unlink() at phar:///usr/local/bin/composer/src/Composer/Util/Filesystem.php:170
Composer\Util\Filesystem->removeDirectoryPhp() at phar:///usr/local/bin/composer/src/Composer/Util/Filesystem.php:137
Composer\Util\Filesystem->removeDirectory() at phar:///usr/local/bin/composer/src/Composer/Downloader/FileDownloader.php:238
Composer\Downloader\FileDownloader->remove() at phar:///usr/local/bin/composer/src/Composer/Downloader/DownloadManager.php:299
Composer\Downloader\DownloadManager->remove() at phar:///usr/local/bin/composer/src/Composer/Installer/LibraryInstaller.php:224
Composer\Installer\LibraryInstaller->removeCode() at phar:///usr/local/bin/composer/src/Composer/Installer/LibraryInstaller.php:137
Composer\Installer\LibraryInstaller->uninstall() at phar:///usr/local/bin/composer/src/Composer/Installer/PluginInstaller.php:66
Composer\Installer\PluginInstaller->install() at phar:///usr/local/bin/composer/src/Composer/Installer/InstallationManager.php:173
Composer\Installer\InstallationManager->install() at phar:///usr/local/bin/composer/src/Composer/Installer/InstallationManager.php:160
Composer\Installer\InstallationManager->execute() at phar:///usr/local/bin/composer/src/Composer/Installer.php:597
Composer\Installer->doInstall() at phar:///usr/local/bin/composer/src/Composer/Installer.php:229
Composer\Installer->run() at phar:///usr/local/bin/composer/src/Composer/Command/UpdateCommand.php:163
Composer\Command\UpdateCommand->execute() at phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.php:245
Symfony\Component\Console\Command\Command->run() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:835
Symfony\Component\Console\Application->doRunCommand() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:185
Symfony\Component\Console\Application->doRun() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:267
Composer\Console\Application->doRun() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:117
Symfony\Component\Console\Application->run() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:106
Composer\Console\Application->run() at phar:///usr/local/bin/composer/bin/composer:61
require() at /usr/local/bin/composer:24
尝试 chmod -R 777 vendor
, sudo chown -R vagrant:vagrant vendor/
, sudo composer install
都不行,最后 https://stackoverflow.com/a/57462048/2963736
救了我:
composer install --no-plugins