Поддельный глобальный 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);