#javascript #laravel #npm #laravel-mix
#javascript #laravel #npm #laravel-смешивание
Вопрос:
Я пытаюсь использовать moment.js в моем проекте laravel не используется vue, но все еще импортируется пакет через npm.
Мой app.js файл:
require('moment/moment.js');
require('./bootstrap');
require('bootstrap-select');
в моем webpack.pix.js файл выглядит следующим образом:
const mix = require('laravel-mix');
mix.setResourceRoot('laravel/public');
mix.js('resources/js/app.js', 'public/js')
.combine([
'resources/theme/dist/js/app.js',
'resources/theme/dist/js/app.init.js',
'resources/theme/dist/js/sidebarmenu.js',
'resources/theme/dist/js/waves.js',
'resources/theme/assets/libs/perfect-scrollbar/dist/perfect-scrollbar.jquery.min.js',
'resources/theme/assets/extra-libs/sparkline/sparkline.js',
'resources/theme/dist/js/custom.js',
'resources/js/custom.js'
], 'public/js/nice-admin.js')
.copyDirectory('resources/theme/assets/images/', 'public/assets/images')
.copyDirectory('resources/theme/dist/css/icons/material-design-iconic-font/fonts', 'public/fonts')
.copy('node_modules/bootstrap-daterangepicker/daterangepicker.css', 'public/css/daterangepicker.css')
.copy('node_modules/bootstrap-select/dist/css/bootstrap-select.min.css', 'public/css/bootstrap-select.min.css')
.sass('resources/sass/app.scss', 'public/css', {
implementation: require('node-sass')
}).options({processCssUrls: false})
И затем в моем custom.js файл, который я только что получил:
$(function() {
"use strict";
let date = moment().format();
console.log(date);
});
Я получаю следующую ошибку:
app.js:13202 Uncaught ReferenceError: moment is not defined
at HTMLDocument.<anonymous> (nice-admin.js:2144)
at mightThrow (app.js:12909)
at process (app.js:12977)
Я проверил, что moment есть в моем скомпилированном app.js файл. Итак, почему мой custom.js файл видит это, и что мне нужно сделать, чтобы это исправить?
Комментарии:
1. Ваш
custom.js
файл импортируется / требуется через вашapp.js
файл или он полностью отдельный?2. Он находится отдельно в файле webpack
Ответ №1:
В данный момент вы ничему не присваиваете moment
значения. Согласно документам, вы должны присвоить его переменной, которая будет использоваться:
var moment = требовать(‘момент’);
момент().format();
Однако это не сработает, если вы хотите использовать его за пределами вашего app.js
файла. Одним из способов сделать это было бы добавить его к window
объекту:
window.moment = require('moment');
Комментарии:
1. Хорошо, это работает. Я где-то еще читал, что прикреплять что-либо к объекту window — плохая практика? Я предполагаю, что это не так?
2. @дефис Я думаю, это было сказано для того, чтобы люди не добавляли что угодно к объекту window просто так, чтобы у них был к нему доступ или потому что они могли. Ради пакетов и библиотек, к которым вы хотите / должны иметь глобальный доступ, я бы сказал, что это определенно то место, где это можно разместить.