Moment js 未定义 Laravel

Posted

技术标签:

【中文标题】Moment js 未定义 Laravel【英文标题】:Moment js undefined Laravel 【发布时间】:2019-08-10 13:00:09 【问题描述】:

我正在尝试在我的 laravel 项目中使用 moment.js,不使用 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)

我已经确认那一刻在我编译的 app.js 文件中。那么为什么我的 custom.js 文件看不到它,我需要做什么来修复它?

【问题讨论】:

您的custom.js 文件是通过您的app.js 文件导入/需要的,还是完全独立的? 在webpack文件中是分开的 【参考方案1】:

您目前没有将moment 分配给任何东西。根据docs,您应该将其分配给要使用的变量:

var moment = require('moment'); 时刻()。格式();

但是,如果您想在 app.js 文件的范围之外使用它,这将不起作用。一种方法是将其添加到 window 对象:

window.moment = require('moment');

【讨论】:

好的,这行得通。我在其他地方读到将东西附加到窗口对象是不好的做法?我猜不是这样? @hyphen 我认为这是为了阻止人们向窗口对象添加任何内容,以便他们可以访问它或因为他们可以访问它。为了你想要/需要全局访问的包和库,我会说它绝对是放置它的地方。

以上是关于Moment js 未定义 Laravel的主要内容,如果未能解决你的问题,请参考以下文章

laravel中的vue js..计算方法未定义

vue.js 的 Laravel 未定义变量异常

Laravel 6 + Vue.js 无法挂载组件:未定义模板或渲染函数

laravel 中的 Javascript 函数未定义

Laravel Vue Axios 未定义

Laravel Mix 未定义 JavaScript 函数