使用 npm 安装 JS 包并使用 webpack laravel mix 进行编译

awe*_*san 2 npm laravel webpack laravel-mix

我是 Laravel 的新手,并且遵循 Laravel 5.4 的 Laracast 教程,
我阅读了 Laravel mix 以及我们如何使用 Webpack Laravel Mix 工具编译我们的资产。所以我尝试使用npm添加一个 JavaScript Package

1- Installed AlertifyJS。 2-在 3- 已执行中添加。资产被编译为,我可以在其中通过查找alertify关键字来查看alertifyjs代码。 我在resources\assets\js\app.js 中使用了如下所示的alertify代码:
require('alertifyjs')resources\assets\js\bootstrap.js
npm run devpublic\js\app.js


`$(document).ready(function(){
    $('.run').on('click' , function(event){
        alertify.alert("This is an alert dialog.", function(){
        alertify.message('OK');
    });
  });
});`
Run Code Online (Sandbox Code Playgroud)


查看文件:

@extends('layouts.app')
@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading text-center"><h2>THIS WILL BE THE HOME PAGE<h2></div>
                <div class="panel-body text-center">
                    Home Page Content Goes Here!
                </div>
                            <button class="run">Show Alert</button>
            </div>
        </div>
    </div>
</div>
@endsection
Run Code Online (Sandbox Code Playgroud)


问题:当我点击按钮Show Alert 时
alertify is not defined错误被记录到控制台。我在编译资产时遗漏了什么吗?

Mic*_*ngo 5

您需要在您app.js实际使用它的地方require alertify 。Webpack 将每个文件保存为一个模块,只需将它们放在一个文件中(包)。但是您期望它在全球范围内可用,这不是一个好主意,并且依赖于全局变量的模块(如 jQuery 插件)在官方 webpack 文档中被称为遗留模块。有关此类遗留模块的更多详细信息,请查看Shimming

无论如何,您的情况并非如此,但请记住,您实际使用它们的文件中应始终需要使用 npm 安装的模块。模块有自己的作用域,它不仅仅是在您需要时将文件放在一起。如果这个模块的概念对你来说是新的,或者你想更好地理解它,你应该阅读Node.js Modules,因为它在 JavaScript 中被大量使用。

resources\assets\js\app.js需要更改为:

const alertify = require('alertifyjs');

$(document).ready(function(){
  $('.run').on('click' , function(event){
    alertify.alert("This is an alert dialog.", function(){
      alertify.message('OK');
    });
  });
});
Run Code Online (Sandbox Code Playgroud)