Symfony 4包含来自供应商目录的资产

sni*_*ady 11 php symfony twig composer-php bootstrap-4

我想从我的twig模板中加载供应商资产,使用composer在供应商目录中下载.

使用相对路径是一种解决方案(在这个例子中我将包括bootstrap css,但同样的问题是对于作曲家所需的任何其他lib,如jQuery,jQueryUI等)

<link rel="stylesheet" href="{{ asset('../vendor/twbs/bootstrap/dist/css/bootstrap.min.css') }}" >
Run Code Online (Sandbox Code Playgroud)

Symfony文档建议使用asset:install来生成从供应商目录到公共的符号链接,但我无法理解它是如何工作的.assets:install -h不太清楚,让我了解如何将特定的供应商路径链接到公共目录.

创建一个simlink与

ln -s /path/of/vendor/lib /path/public/dir
Run Code Online (Sandbox Code Playgroud)

工作正常但是,每次我使用composer查找更新时,都会删除创建的符号链接.

是否有关于"最佳实践"的想法,以包含供应商目录中的资产?

谢谢

Pro*_*f83 1

就“最佳实践”而言,我通常将npmgulp或类似的东西一起使用,它会生成分发 css 和 js 文件,这些文件输出到public/.

package.json这是最近项目文件中的示例

{
  "devDependencies": {
    "bootstrap": "^4.1.3",
    "gulp": "^4.0.0",
    "gulp-concat": "^2.6.1",
    "gulp-sass": "^3.1.0"
  },
  "scripts": {
    "compile:styles": "gulp styles"
  }
}
Run Code Online (Sandbox Code Playgroud)

而是运行npm install --save-dev bootstrap gulp gulp-concat gulp-sass以获取最新版本等。

gulpfile.js你也需要这个


var gulp = require('gulp');
var concat = require('gulp-concat');
var sass = require('gulp-sass');

gulp.task('styles', function(){
    return gulp
        .src([
            'app/Resources/sass/main.scss',
            ])
        .pipe(sass({outputStyle:'compressed', includePaths: ['node_modules']}).on('error', sass.logError))
        .pipe(concat('styles.min.css'))
        .pipe(gulp.dest('public/css'));
    });

Run Code Online (Sandbox Code Playgroud)

设置完成后,您可以npm run compile:styles从控制台运行,app/Resources/sass/main.scssSASS 文件将被预处理、缩小并输出到public/css/styles.min.css.

请注意,gulp 文件包含 node_modules 文件夹,因此您可以在main.scss文件中导入 bootstrap,例如

$primary: #55a367;

@import 'bootstrap/scss/bootstrap';
Run Code Online (Sandbox Code Playgroud)

来自树枝模板:

<link rel="stylesheet" type="text/css" href="{{ asset('css/styles.min.css') }}">
Run Code Online (Sandbox Code Playgroud)

我通常会同时承诺main.scssstyles.min.css