Поддельный глобальный jQuery с browserify-shim? (Не удается найти модуль 'jquery')

Я сталкиваюсь с загадочной проблемой с Browserify, касающейся плагинов jQuery. Поскольку у меня есть несколько пакетов для отдельных вложенных приложений, у меня есть несколько глобальных библиотек: <script> теги в моем HTML, чтобы предотвратить повторение.

я использую gulp, browserify-shim а также babelify создать мои связки.

В package.json:

"dependencies": {
  "jquery.cookie": "^1.4.1",
  ...
},
"browserify-shim": {
  "jquery": "global:jQuery",
   ...
},
"browserify": {
  "transform": [
    "browserify-shim"
  ]
}

В base.html: (В производстве это будут ссылки CDN)

<!--[if lt IE 9]><script src="/bower_components/jquery-legacy/jquery.min.js"></script><![endif]-->
<!--[if gte IE 9]><!-->
<script src="/bower_components/jquery/dist/jquery.min.js"></script>
<!--<![endif]-->

В одном из моих исходных файлов:

import $ from 'jquery'; // this works
import 'jquery.cookie'; // this crashes browserify

Сообщение об ошибке:

Error: Cannot find module 'jquery' from '/path/to/node_modules/jquery.cookie'

jQuery не устанавливается с npm, так как я не хочу, чтобы он был в моих пакетах.

Я предполагаю, что проблема здесь в том, что есть звонок require('jquery') в jquery.cookie.js это не решается.

Как "подделать" существование глобального экземпляра jQuery для плагина с browserify-shim?


NB: Это решение не отвечает моим потребностям, так как jQuery будет свернут во множество пакетов.

1 ответ

Решение

Решаемые. Это решение, кажется, работает отлично.

Для справки, вот мое (исправлено) watchify звонок из моего Gulpfile:

var b = browserify({
    entries: [app.input_dir + app.entry],
    debug: true,
    cache: {},
    packageCache: {},
    fullPaths: true
})
    .transform(babelify)
    .transform({
        global: true
    }, 'browserify-shim')
    .plugin('minifyify', {
        map: app.output_dir + app.entry + '.map',
        output: app.output_dir + app.entry + '.map'
    });

var watcher = watchify(b);
Другие вопросы по тегам