【问题标题】:Laravel 5.4 and Gridstack.jsLaravel 5.4 和 Gridstack.js
【发布时间】:2018-01-08 06:29:30
【问题描述】:

如何将第三方 js 文件添加到特定刀片视图?

基本上,我想在我的新项目的仪表板页面中添加 gridstack 功能。

我已经尝试从下载js和css文件,然后将gridstack.js放在项目的resources/assets/js/文件夹中,css文件放在项目的resources/assets/css/文件夹中

下一步是在混音器中加载文件。为此,我认为我可以转到 /resources/assets/js/app.js 并添加库

require("./bootstrap");
//Add the following two lines
require("./jquery-ui.min");
require("./gridstack");

然后我运行 npm run dev,它给出了以下错误

ERROR 编译失败,出现 20 个错误

未找到这些依赖项:

./resources/assets/js/gridstack.js 中的 jquery-ui/data
./resources/assets/js/gridstack.js 中的 jquery-ui/disable-selection
省略了 18 行类似的行

要安装它们,您可以运行: npm install --save jquery-ui/data jquery-ui/禁用选择 jquery-ui/可聚焦 jquery-ui/form jquery-ui/ie jquery-ui/keycode jquery-ui/labels jquery-ui/jquery-1-7 jquery-ui/插件 jquery-ui/安全模糊 jquery-ui/scroll-parent jquery-ui/tabable jquery-ui/unique-id jquery-ui/version jquery-ui/widget jquery-ui/safe-active-element jquery-ui/widgets/mouse jquery-ui/widgets/可拖动 jquery-ui/widgets/droppable jquery-ui/widgets/可调整大小

当然我尝试运行npm install --save jquery-ui/data 看看它是否有效,但它没有:

npm 错误!权限被拒绝(公钥)。
致命:无法从远程存储库中读取。
请确保您具有正确的访问权限并且存储库存在。

如何在我的项目中添加一个简单的 js 和 css 而不会出现所有这些编译错误...?

我还尝试了另一种方法:从上面的方法中删除了需求,并找到了 webpack.mix.js 文件并使其看起来像这样:

mix.js('resources/assets/js/app.js', 'public/js')
   .js('resources/assets/js/app-landing.js', 'public/js/app-landing.js')
   .js('resources/assets/js/jquery-ui.min.js', 'public/js')
   .js('resources/assets/js/gridstack.js', 'public/js')
....

然后我运行npm run dev 只是从上面得到相同的错误。

这里有什么问题? 我试图删除 jquery-ui 引用并再次运行 npm ......完全相同的错误

另外,我在我的项目中使用 npm 安装了 gridstack...但我不知道如何直接使用它。我应该可以使用它,因为它是“安装的”,但是如何使用呢?

我也做了npm cache clean,没有效果 我还验证了我的 node 和 npm 版本,它们看起来还可以:

node v6.10.3
npm  v3.10.10

编辑 从需求中删除 ./ 并完全删除 jquery-ui(它已经加载)后,我设法从 npm 命令中不再出现错误。 然而,gridstack 功能并不存在。我将我的源代码与 gridstack 的official demo 进行了比较,发现它们包含 2 个 gridstack js 文件:

<script src="../dist/gridstack.js"></script>
<script src="../dist/gridstack.jQueryUI.js"></script>

但是 Laravel mix 不同意我添加额外的要求。如果在 /resources/assets/js/app.js 中输入以下内容,我会再次从 npm 收到错误

require("./bootstrap");
require("gridstack");
require("gridstack.jQueryUI"); // nor does it work if I use gridstack.all.js or gridstack.jQueryUI.js

如何在我的 Laravel 5.4 项目中获得 gridstack 的全部功能?

编辑 似乎有效的是:

  1. 删除之前完成的所有更改,如 app.js 中的更改

  2. 我将 webpack.config.js 从 node_modules/laravel-mix 复制到我项目的根文件夹中

  3. 我添加了下面的代码

    module.exports.resolve = { 扩展, 别名:{ 'vue$': 'vue/dist/vue.common.js', 'jquery-ui': path.resolve(__dirname, 'node_modules/jquery-ui/ui') } };

  4. 在 webpack.mix.js 中,我添加了以下内容:

    mix.js('resources/assets/js/app.js', 'public/js') .copy('node_modules/gridstack/dist/gridstack.all.js','public/js');

  5. 在 package.json 我添加了:

    “开发依赖”:{ ... “gridstack”:“^0.3.0” }

  6. 在命令行中我做了

    sudo npm 重建节点-sass

然后

sudo npm run dev

在完成上述操作后,npm 正确编译了 mix,bun now,我在前端收到 jQuery 错误:

jQuery.Deferred 异常:c.draggable 不是函数 d.prototype.draggable@http://myproject.com/js/gridstack.all.js:16:1395

这指向 gridstack.all.js 的第二部分(就在它的开头,其中 jquery 被定义......再次) 错误似乎表明 jquery 被多次加载。但这在经典的 PHP 应用程序中不是问题。

知道如何进行这项工作吗? 默认的 laravel 应用程序默认需要 Bootstrap、lodash 和 jquery,当我将 gridstack 添加到项目中时,看起来好像在某个地方需要 jquery。我就是不明白。

谁能尝试模拟我在做什么并告诉我他们是怎么做的 是吗?

【问题讨论】:

  • 只是好奇.... 什么是反对票?
  • 你的问题似乎是一大堵文字,如果我快速阅读问题我看不到一个明确的问题,它看起来是一个“我该如何解决这个问题”的问题,缺乏一个 MVCE。
  • 你能在不使用./的情况下尝试require语句,从而使用require('gridstack')
  • 我已经这样做了,并且成功了,但是,如果我这样做,Laravel 似乎不喜欢/解释 gridstack.js。当我运行 npm run dev 时,它没有更多错误,但功能不存在。我在 Laravel 之外做了一个测试,结果是一样的。它也需要其他 js 文件。它需要 gridstack.jQueryUI.js,它包含在 gridstack.all.js 中。那么如何将 gridstack.all.js 或 gridstack.jQueryUI.js 添加到我的项目中以使其具有功能?它不像使用 gridstack.js 那样工作
  • 对不起,这个问题是一堵文字墙,因为我喜欢直截了当,而且它还包含一个很大的错误消息……我不能排除这一点。很难使它成为 MVCE,但我可以告诉你,以下演示有效:troolee.github.io/gridstack.js/demo/float.html 但我无法对其进行测试,因为 Laravel Mix 不符合这些 JS 要求。我希望有人之前添加了第三方 JS 文件,比如 gridstack 到他们的项目中

标签: gridstack laravel npm laravel-5.4 gridstack


【解决方案1】:

您需要通过asset() 包含gridstack,然后一切都会好起来的——对于这个例子,文件在/public/js/dashboard 例如(hoosuite 网格演示页面)

<!DOCTYPE html>
<html>
<head>
  <title>Grid Demo</title>
  <link rel="stylesheet" href="css/dashboard/style.css" />
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
  <script src="{{ asset('js/dashboard/fixtures.js') }}" type="text/javascript"></script>
  <script src="{{ asset('js/dashboard/gridList.js') }}" type="text/javascript"></script>
  <script src="{{ asset('js/dashboard/jquery.gridList.js') }}" type="text/javascript"></script>
  <script src="{{ asset('js/dashboard/load.js') }}" type="text/javascript"></script>

</head>
<body>
  <div class="header">
    <a href="#remove-row" class="button remove-row">-</a>
    <a href="#add-row" class="button add-row">+</a>
    <p>
      <a class="github-button" href="https://github.com/hootsuite/grid" data-style="mega" data-count-href="/hootsuite/grid/stargazers" data-count-api="/repos/hootsuite/grid#stargazers_count" data-count-aria-label="# stargazers on GitHub" aria-label="Star hootsuite/grid on GitHub">GitHub</a>
    </p>
  </div>
  <div class="grid-container">
    <ul id="grid" class="grid">
      <li class="position-highlight">
        <div class="inner"></div>
      </li>
    </ul>
  </div>
  <script async defer id="github-bjs" src="https://buttons.github.io/buttons.js"></script>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 2018-07-11
    • 1970-01-01
    • 2017-12-21
    • 2018-02-28
    相关资源
    最近更新 更多