Использование браузера с плагинами npm jQuery и non-npm

Я использую браузеру для комплектации интерфейсного кода. Это было здорово до сих пор, но у меня возникли трудности с смешиванием пакетов npm и non npm. Например, используя версию jQuery npm с версиями jQuery без CJS.

Мое текущее решение - использовать ключ browser в package.json, чтобы указать на jQuery dist, а затем использовать browserify-shim, чтобы добавить его как зависимость плагинов.

Есть ли более чистый способ сделать это, чем то, что у меня есть сейчас?

Изменить: В настоящее время я пытаюсь использовать npm и package.json для управления всеми моими зависимостями, поэтому я не хочу использовать беседу в этом проекте. Назовите меня сумасшедшим:)

Package.json

  "dependencies": {
    "jquery": "~2.1.0",
    "browserify": "latest",
    "browserify-shim": "^3.5.0",
    "jquery-waypoints": "[email protected]:imakewebthings/jquery-waypoints.git",
    "jquery-validation": "git://github.com/jzaefferer/jquery-validation"
  },
  "browser": {
    "jquery": "./node_modules/jquery/dist/jquery.js",
    "jquery-waypoints": "./node_modules/jquery-waypoints/waypoints.js",
    "jquery-validate": "./node_modules/jquery-validation/build/release.js"
  },
  "browserify-shim": {
    "jquery": "$",
    "jquery-waypoints": {
      "depends": [
        "jquery"
      ]
    },
    "jquery-validate": {
      "depends": [
        "jquery"
      ]
    }
  },
  "browserify": {
    "transform": [
      "browserify-shim"
    ]
  }

Ответы

Ответ 1

Я бы сделал следующее:

  • Используйте debowerify, чтобы включить библиотеки, доступные в bower, в вашем случае будут jquery-waypoints, jquery-validation

  • Используйте jquery, который входит в пакет npm, который доступен здесь https://github.com/jquery/jquery

Как таковой, я бы также удалил Browsify-shim на время.

Ответ 2

Директива browser - это просто псевдоним, указывающий, что вы хотите, когда пишете jquery. По умолчанию для jquery указан путь в node_modules, поэтому ваша строка:

"jquery": "./node_modules/jquery/dist/jquery.js",

... избыточно, и вы можете удалить его, потому что, когда вы пишете "depends": ["jquery"] в вашей конфигурации Browserify Shim, jquery уже указывает на ./node_modules/jquery/dist/jquery.js без этой строки в вашей клавише browser. Фактически, вы, вероятно, могли бы полностью удалить директиву browser, вам нужно будет проверить конфигурацию в этих файлах package.json плагинов jQuery, но, скорее всего, они уже сглажены, как и у вас, без переопределения browser.

В противном случае я не думаю, что есть более чистый способ реализовать это. Как вы сказали, вам нужно использовать Browserify Shim, чтобы закрепить эти плагины, не связанные с CJS jQuery, и вы делаете это правильно.

Ответ 3

Вам не хватает правильного определения зависимостей (например, установите "$" в объявление jquery):

"plugin": {
  "exports": "plugin",
  "depends": [
    "jquery:$"
  ]
},...