我已经为使用 Grunt 自动构建任务的 Web 应用程序设置了一个项目。我正在使用 SASS 和 Compass 以及 Composer 来管理 PHP 依赖项。目前我有一个看起来像这样的文件夹结构:
-project
|-build
|-node_modules
|-src
| |-composer.json
|Gemfile
|Gruntfile.js
|package.json
这样,我对 Grunt 的所有依赖项都在 package.json 中配置并由 npm 管理,SASS 和 Compass 的依赖项在 Gemfile 中配置并由 bundler 管理,而 PHP 的依赖项在 composer.json 中配置并由 Composer 管理。Grunt 从 src 文件夹中复制文件以在构建期间构建,以及从 SASS 生成/压缩 CSS 并缩小 js。
我想知道是否有更好的文件夹结构来处理这个问题,因为我希望能够从项目根目录运行所有初始工作环境设置,而不是必须从 src 中运行 composer。目前我将它保存在 src 中以便正确生成自动加载路径,否则它将项目根目录视为 Web 根目录。
更新:
对不接受和解释不充分表示歉意。为了帮助澄清下面是我composer.json
现在的内容,它已被移至项目根目录,问题不在于供应商文件,而在于使用 composer 为项目文件创建自动加载器:
{
"config": {
"vendor-dir": "src/vendor"
},
"repositories": [
{
"type": "composer",
"url": "https://packages.zendframework.com/"
}
],
"require": {
"aws/aws-sdk-php": "2.4.*",
"zendframework/zend-json": "2.0.*"
},
"autoload": {
"psr-0": {"Project\\": "src/include/"}
}
}
其中输出以下autoload_namespaces.php
文件vendor/composer
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname(dirname($vendorDir));
return array(
'Zend\\Stdlib\\' => array($vendorDir . '/zendframework/zend-stdlib'),
'Zend\\Json\\' => array($vendorDir . '/zendframework/zend-json'),
'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
'Guzzle\\Tests' => array($vendorDir . '/guzzle/guzzle/tests'),
'Guzzle' => array($vendorDir . '/guzzle/guzzle/src'),
'Project\\' => array($baseDir . '/src/include'),
'Aws' => array($vendorDir . '/aws/aws-sdk-php/src'),
);
使用双重调用$vendorDir
查看两个级别是可以的,但现在指向上面的级别,现在明确硬编码到自动加载器中。我怀疑解决这个问题的唯一方法是回到文件夹中,或者通过编写构建脚本来重写这个文件,这看起来很讨厌。有什么选择吗?dirname
$baseDir
src
Project
composer.json
src