Установка пакетов npm в Laravel в 5.7 - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь установить пакеты npm в свой проект Laravel.Итак, я установил npm с npm install, а затем npm install masonry-layout, затем я запустил npm run watch, и он появился в моей папке node_modules.

Я попытался добавить require('masonry-layout'); в мои app.js идобавив window.anything = require('masonry-layout'); или window._ = require('masonry-layout'); к моему bootstrap.js - я называю это на мой взгляд следующим образом:

var $grid = $('.grid').imagesLoaded( function() {
    $grid.masonry({
        itemSelector: '.grid-item',
        columnWidth: '.grid-sizer',
        percentPosition: true,
        isResizable: true,
        transitionDuration: '0.8s',
        isAnimated: true
    });
});

My app.js:

require('./bootstrap');
require('masonry-layout');
require('imagesloaded');

bootstrap.js:


window._ = require('lodash');
window.anything = require('masonry-layout');
window.anything = require('imagesloaded');


/**
 * We'll load jQuery and the Bootstrap jQuery plugin which provides support
 * for JavaScript based Bootstrap features such as modals and tabs. This
 * code may be modified to fit the specific needs of your application.
 */

try {
    window.Popper = require('popper.js').default;
    window.$ = window.jQuery = require('jquery');

    require('bootstrap');
} catch (e) {}

/**
 * We'll load the axios HTTP library which allows us to easily issue requests
 * to our Laravel back-end. This library automatically handles sending the
 * CSRF token as a header based on the value of the "XSRF" token cookie.
 */

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

/**
 * Next we will register the CSRF Token as a common header with Axios so that
 * all outgoing HTTP requests automatically have it attached. This is just
 * a simple convenience so we don't have to attach every token manually.
 */

let token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

/**
 * Echo exposes an expressive API for subscribing to channels and listening
 * for events that are broadcast by Laravel. Echo and event broadcasting
 * allows your team to easily build robust real-time web applications.
 */

// import Echo from 'laravel-echo'

// window.Pusher = require('pusher-js');

// window.Echo = new Echo({
//     broadcaster: 'pusher',
//     key: process.env.MIX_PUSHER_APP_KEY,
//     cluster: process.env.MIX_PUSHER_APP_CLUSTER,
//     encrypted: true
// });

и да, я установил imagesLoaded тоже, но это тоже не работает.Если я включу cdn в мое представление, оно будет работать так, как должно.

Что я делаю не так?

1 Ответ

2 голосов
/ 09 апреля 2019

Вы загружаете masonry-layout и imagesLoaded перед загрузкой jQuery. Вы должны загрузить его после jQuery следующим образом:

try {
    window.Popper = require('popper.js').default;
    window.$ = window.jQuery = require('jquery');

    window.Masonry = require('masonry-layout');
    window.ImagesLoaded = require('imagesloaded');

    require('bootstrap');
} catch (e) {}

Тогда вы можете использовать это так:

new Masonry('.grid', {
    // options
});

Также вы можете удалить их из app.js.

Примечание

Если вы действительно хотите использовать его как $('.grid').masonry(...), вам нужно установить jquery-bridget:

npm install jquery-bridget

Затем сделайте это в вашем файле начальной загрузки:

var $ = require('jquery');
var jQueryBridget = require('jquery-bridget');
var Masonry = require('masonry-layout');

// make Masonry a jQuery plugin
jQueryBridget( 'masonry', Masonry, $ );

// now you can use $().masonry()
$('.grid').masonry({
  columnWidth: 80
});

Для получения дополнительной информации: https://masonry.desandro.com/extras.html#webpack

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...