2016-06-30 2 views
0

Я создаю модульное приложение Laravel 5.2, которое состоит из нескольких пакетов, запатентованных на установку Laravel с использованием композитора.Laravel elixir копия, не работающая над символическими ссылками

Каждый из пакетов несет ответственность за управление собственными активами (копирование в общую папку, сжатие, управление версиями и т. Д.). Для этого у меня есть gulpfile, который использует эликсир для каждого пакета, а затем они загружаются в основной файл gulp для установки laravel.

Это основные gulpfile.js по установке Laravel:

var filesystem = require("fs"); 
var gulp = require('gulp'); 
var elixir = require('laravel-elixir'); 

gulp.task('default', function() { 
    runPackagesGulpFiles(); 
}); 

function runPackagesGulpFiles() { 
    var packagesPath = 'vendor/my-organization/'; 
    filesystem.readdirSync(packagesPath).forEach(function (file){ 
     try { 
      var gulpFilePath = packagesPath + file + '/resources/assets/gulpfile.js'; 
      var fileStat = filesystem.statSync(gulpFilePath); 
      require('./' + gulpFilePath); 
     } catch (error) { 
      if (error.message.indexOf('no such file or directory') < 0) { 
       console.error(error.stack); 
      } 
     } 
    }); 
} 

Все основные gulpfile.js делает, это выполнить пакеты gulpfiles, если они существуют, используя require() функцию.

Ниже приведен пример пакета gulpfile:

var elixir = require('laravel-elixir'); 

elixir(function(mix) { 
    mix.copy('vendor/my-organization/store-manager/resources/assets/js/', 'public/assets/js/elixir_components/store-manager/'); 
    mix.version([ 
     //Store structure versioning 
     'assets/js/elixir_components/store-manager/stores/store.js', 
     'assets/js/elixir_components/store-manager/stores/views.js', 
     'assets/js/elixir_components/store-manager/stores/models.js', 
     'assets/js/elixir_components/store-manager/stores/controllers.js', 
     //Store resources versioning 
     'assets/js/elixir_components/store-manager/resources/resources.js', 
     'assets/js/elixir_components/store-manager/resources/views.js', 
     'assets/js/elixir_components/store-manager/resources/models.js', 
     'assets/js/elixir_components/store-manager/resources/controllers.js', 
     //Store structure resources versioning 
     'assets/js/elixir_components/store-manager/structures/structure.js', 
     'assets/js/elixir_components/store-manager/structures/views.js', 
     'assets/js/elixir_components/store-manager/structures/models.js', 
     'assets/js/elixir_components/store-manager/structures/controllers.js', 
    ]); 
}); 

В обычном сценарии случае это работает просто отлично. Обычным сценарием является то, что пакеты загружаются с использованием композитора.

Однако для разработки пакетов я создаю символическую ссылку в папке поставщика, которая указывает на папку пакета на моей локальной машине.

Когда я пытаюсь выполнить глотка в среде разработки, я получаю сообщение об ошибке: Cannot find module 'laravel-elixir'

[22:27:03] Using gulpfile ~/supermarket-cms/gulpfile.js 
[22:27:03] Starting 'default'... 
Error: Cannot find module 'laravel-elixir' 
    at Function.Module._resolveFilename (module.js:339:15) 
    at Function.Module._load (module.js:290:25) 
    at Module.require (module.js:367:17) 
    at require (internal/module.js:16:19) 
    at Object.<anonymous> (/home/vagrant/Code/store-manager/resources/assets/gulpfile.js:1:76) 
    at Module._compile (module.js:413:34) 
    at Object.Module._extensions..js (module.js:422:10) 
    at Module.load (module.js:357:32) 
    at Function.Module._load (module.js:314:12) 
    at Module.require (module.js:367:17) 
[22:27:03] Finished 'default' after 12 ms 

Проблема, что я решил, установив Laravel-эликсир по всему миру. Но после того, как я это сделаю, задача gulp заканчивается, и мои активы не копируются.

[21:25:02] Using gulpfile ~/supermarket-cms/gulpfile.js 
[21:25:02] Starting 'default'... 
[21:25:02] Finished 'default' after 3.78 ms 

Никакой ошибки не возникает. Надеюсь, кто-нибудь может мне помочь. Спасибо.

+0

Вы используете Vagrant на хосте с Windows? –

+0

@ MarcoAurélioDeleu Нет, я использую Homestead на Монетном дворе. – BernalCarlos

ответ

0

Я думаю, что вы идете об этом неправильно. Это требует уровня знаний о работе каждого пакета vendor, что противоречит назначению менеджеров пакетов.

Вместо этого вы должны разрешить публикацию всех активов из вашего пакета поставщика.

Вы начнете, убедившись, что в вашем методе boot вы публикуете свои активы соответственно:

$this->publishes([ 
    __DIR__.'/path/to/assets' => resource_path('vendor/my-organization/'.$package_name), 
], 'public'); 

//make sure to replace '/path/to/assets' with your packages asset path. 

Тогда при выполнении

php artisan vendor:publish 

Теперь все ваши JavaScript и CSS будет оттеснена это соответствующее место в вашем resource_path

resources/ 
    vendor/ 
     my-organization/ 
      <package_name> 
       js/ 

Теперь попробуй посмотреть, как ваша задача выполнить задачу Gulp и загрузить все сценарии с /my-orginazation/**/js. Итак, теперь вы можете просто сделать что-то вроде этого:

elixir(function(mix){ 
    'vendor/my-organization/**/js/*.js', 
}, 'public/js/outputfile.js, 'resources'); 
0

Do, НПМ установить --global Laravel-эликсир, прежде чем сказать, глотком

+0

Ошибка уже не найдена, ошибка «laravel-elixir» 'модуля не исчезает, но затем завершается задача gulp, и мои активы не копируются. – BernalCarlos