Модуль рефакторинга nodejs - PullRequest
0 голосов
/ 02 августа 2020

Я использую Laravel Mix для компиляции узловых модулей.

В app.js У меня загружены следующие модули.

window.Helper = require('./Helper.js');
require('./Calendar.js');

Helper.js

module.exports = {
    foo: function(){
        console.log('foo called!');
    },

    bar: function () {
        console.log('bar called!');
    }
}

В представлении я могу запускать функции из модуля Helper просто: -

<script>
Helper.foo();
Helper.bar();
</script>

Однако мне не удалось выполнить рефакторинг файла Calendar.js, который выполняется на каждой странице.

import { Calendar } from '@fullcalendar/core';
import interactionPlugin from '@fullcalendar/interaction';
import dayGridPlugin from '@fullcalendar/daygrid';
import timeGridPlugin from '@fullcalendar/timegrid';

document.addEventListener('DOMContentLoaded', function() {
    var calendarElement = document.getElementById('calendar');
  
    var calendar = new Calendar(calendarElement, {
      plugins: [ interactionPlugin, dayGridPlugin, timeGridPlugin ],
  
      initialView: 'dayGridMonth',
      headerToolbar: {
          left: 'prev,next today',
          center: 'title',
          right: 'dayGridMonth,timeGridWeek,timeGridDay'
      },
      firstDay: 1,
      editable: false,
      droppable: false,
      allDaySlot: false,
      displayEventTime: true,
      defaultTimedEventDuration: '00:10:00',
      slotDuration: '00:10:00',
      snapDuration: '00:10:00',
      forceEventDuration: true,
      slotMinTime: '08:00:00',
      slotMaxTime: '20:00:00',
    });

    calendar.render();
}); 

Как провести рефакторинг кода, чтобы можно было загрузить модуль календаря так же, как модуль помощника.

Пример: -

app.js

window.Helper = require('./Helper.js');
window.Calendar = require('./Calendar.js');

В представлении я мог бы запустить как

<script>
    Calendar.init('#calendar');
    Calendar.run();
</script>

1 Ответ

0 голосов
/ 03 августа 2020

В Helper.js вы указали, что экспортирует модуль. В этом случае вы используете синтаксис модуля Node Common JS, чтобы указать экспортируемые данные, присвоив им значение module.exports. Вы можете узнать больше об этом в документации по узлам: https://nodejs.org/docs/latest/api/modules.html.

В случае Calendar.js вы не указали экспорт. Поэтому, когда вам это нужно, код запускается, но этот модуль ничего не возвращает.

В Calendar.js, поскольку вы используете синтаксис модуля ES, вы можете указать свой экспорт следующим образом:

export function init() {
  /* do things */
}

export function run() {
  /* do other things */
}

И теперь, когда вы require это, эти методы могут быть импортированы (назначены и использованы) в app.js:

window.Calendar = require('./Calendar.js');

Подробнее о модулях ES можно прочитать здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules.

...