【问题标题】:How to set up Browserify with Elixir and Browserify Shim on Laravel 5?如何在 Laravel 5 上使用 Elixir 和 Browserify Shim 设置 Browserify?
【发布时间】:2023-03-28 05:40:01
【问题描述】:

我正在尝试在 Laravel 5.2 上使用 Elixir 和 Browserify Shim 设置 Browserify,以便在我的 JavaScript 文件中使用 Gulp,但到目前为止我运气不佳。这应该很简单,但事实并非如此。

这是我的 package.json

{
  "private": true,
  "devDependencies": {
    "gulp": "^3.8.8"
  },
  "dependencies": {
    "bootstrap-sass": "^3.0.0",
    "browserify-shim": "^3.8.12",
    "jquery": "^2.2.0",
    "jquery-ui": "^1.10.5",
    "laravel-elixir": "^4.0.0"
  },
  "browser": {
    "app": "./resources/assets/js/app.js",
    "utils": "./resources/assets/js/utils.js",
  },
  "browserify": {
    "transform": [
      "browserify-shim"
    ]
  },
  "browserify-shim": {
    "app": {
      "depends": [
        "jquery:$",
        "utils:Utils"
      ]
    },
    "utils": {
      "depends": [
        "jquery:$"
      ]
    },
  }
}

gulpfile.js

var elixir = require('laravel-elixir');

elixir(function (mix) {
    mix.browserify('main.js', './public/js/bundle.js');
});

入口脚本 ma​​in.js 如下所示:

var $ = require('jquery');
var Utils = require('utils');
var App = require('app');

app.js

var App = {
     init: function(){
         console.log(Utils);
         Utils.doSomething();
     }
    //other methods
};

简而言之:Utils依赖于$App同时依赖于$Utils

当我从终端点击 gulp 时,bundle.js 已正确创建。所有脚本都包含在 Browserify 代码中(如预期的那样)。每个脚本都包含所有依赖项,就像我在 package.json 中配置的一样,所以这部分看起来也不错。

问题是我包含的所有依赖项都是空对象。例如,app.js 中的 Utils 是空的,当我尝试调用它的方法“doSomething”时出现错误。控制台日志打印出一个空对象“{}”而不是真实对象。唯一正确包含的脚本是 jQuery,它不是一个空对象。

这里可能有什么问题?我是否需要在我的 JS 文件或配置中进行一些更改才能使其正常工作?看起来我已经很接近解决方案了,但它仍然不起作用,我根本无法使用它。

【问题讨论】:

    标签: laravel-5 gulp browserify laravel-elixir browserify-shim


    【解决方案1】:

    直接使用 browserify-shim 属性中的“exports”是最简单的解决方案:

    "browserify-shim": {
        "app": {
          "exports": "App",
          "depends": [
            "jquery:$",
            "utils:Utils"
          ]
        },
        "utils": {
          "exports": "Utils",
          "depends": [
            "jquery:$"
          ]
        },
      }
    

    【讨论】:

      【解决方案2】:

      查看this repo,我相信它显示了您应用的固定版本。问题是您的 app.jsutils.js 模块没有将任何内容导出到它们各自的 require 调用中。一种选择是添加如下一行:

      module.exports = App;
      

      到您的app.js 文件的底部,相当于您的utils.js 文件的底部。你会看到你是否测试了badapp 没有这一行的repo,并产生了你所描述的确切行为。

      请参阅this answer 了解问题的解释。

      【讨论】:

        猜你喜欢
        • 2016-09-18
        • 1970-01-01
        • 2015-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 1970-01-01
        • 2014-08-30
        相关资源
        最近更新 更多