Gulp composer 在一大口构建和部署

avwztpqn  于 2022-12-08  发布在  Gulp
关注(0)|答案(1)|浏览(168)

在使用gulp构建时,如何让composer正确安装依赖项?
我的构建过程设置输出到一个固定的位置,../sites/www/public_html../sites/dev/public_html取决于环境参数是否传递给gulp任务。
我想自动化composer安装,更新和优化,以输出正确的供应商文件在../sites/www/vendor../sites/dev/vendor无论何时构建是最初运行或只是优化的基础上,任何观察php文件正在改变。
我的构建文件夹具有以下结构:

source/
bower.json
composer.json
composer.lock
gulpfile.json
package.json

我的示例composer.json包含以下内容:

{
    "name": "mycomposer/mycomposer",
    "version": "1.0.0",
    "autoload": {
        "psr-4" : {
            "mycomposer\\": "public_html/app/mycomposer"
        }
    },
    "require": {
        "rollbar/rollbar": "^1.3",
        "vlucas/phpdotenv": "^2.4.0"
    }
}

我尝试了一个gulp-compose和任务来安装composer库,并为本地第一方库运行dumpautoload

gulp.task('composer', function() {

  var dest = argv.live ? 'www' : 'devsite',
     env = '../sites/' + dest + '/public_html';

  $.composer('config vendor-dir ' + env.replace('public_html', 'vendor') );

  $.composer({
    "no-ansi": true,
    "no-dev": true,
     "no-interaction":  true,
     "no-progress":  true,
     "no-scripts":  true,
     "optimize-autoloader": true
  });

  $.composer('dumpautoload ', {
    optimize: true
  });
});

任务完成后,我发现$baseDir变量引用了构建目录

预期

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

输出

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname(dirname(dirname($vendorDir))).'/mybuild';

这是我可以实现的吗?或者我真的应该在构建过程之外单独运行composer吗?
谢谢

ee7vknir

ee7vknir1#

我也遇到过类似的问题。我使用的是gulp-composer包。

gulpfile.js文件名

const composer = require('gulp-composer');

gulp.task('composer-deployed', async function() {
     
    let opts = {
        "working-dir": 'my-path-to-composer.json',
        "self-install": true, // false for my case
        optimize: true,
        "classmap-authoritative": true
    };
    composer("dumpautoload", opts);
});

在我的例子中,我使用composer installed globaly,但是你可以在opts{}中选择bin: 'path-to-composer.phar'的bin路径。

相关问题