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-switchDingoApi的数据中间件,用来切换ArraySerializer和DataArraySerializer安装成功后,在路由文件
Route/Api.php修改:. . . $api->version('v1', [ 'middleware' => 'serializer:array' ], function ($api) { . . .增加中间件
serializer,参数为array -
composer require guzzlehttp/guzzle:~6.0Guzzle 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