首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES6 + jQuery + Bootstrap -未定义的ReferenceError: jQuery没有定义吗?

ES6 + jQuery + Bootstrap -未定义的ReferenceError: jQuery没有定义吗?
EN

Stack Overflow用户
提问于 2016-10-10 09:01:16
回答 5查看 5.7K关注 0票数 3

如何导入jQuery作为ES6中引导程序的依赖项?

我试过:

代码语言:javascript
复制
import {$,jQuery}  from 'jquery';
import bootstrap from 'bootstrap';

但我总是会犯这样的错误:

transition.js:59未定义ReferenceError: jQuery未定义

它指向该文件:

代码语言:javascript
复制
/* ========================================================================
 * Bootstrap: transition.js v3.3.7
 * http://getbootstrap.com/javascript/#transitions
 * ========================================================================
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * ======================================================================== */


+function ($) {
  'use strict';

  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
  // ============================================================

  function transitionEnd() {
    var el = document.createElement('bootstrap')

    var transEndEventNames = {
      WebkitTransition : 'webkitTransitionEnd',
      MozTransition    : 'transitionend',
      OTransition      : 'oTransitionEnd otransitionend',
      transition       : 'transitionend'
    }

    for (var name in transEndEventNames) {
      if (el.style[name] !== undefined) {
        return { end: transEndEventNames[name] }
      }
    }

    return false // explicit for ie8 (  ._.)
  }

  // http://blog.alexmaccaw.com/css-transitions
  $.fn.emulateTransitionEnd = function (duration) {
    var called = false
    var $el = this
    $(this).one('bsTransitionEnd', function () { called = true })
    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
    setTimeout(callback, duration)
    return this
  }

  $(function () {
    $.support.transition = transitionEnd()

    if (!$.support.transition) return

    $.event.special.bsTransitionEnd = {
      bindType: $.support.transition.end,
      delegateType: $.support.transition.end,
      handle: function (e) {
        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
      }
    }
  })

}(jQuery);

有什么想法吗?

编辑:

我的吞咽文件:

代码语言:javascript
复制
var gulp = require('gulp');
var browserify = require('browserify');
var babelify = require('babelify');
var source = require('vinyl-source-stream');
var gutil = require('gulp-util');

gulp.task('es6', function() {
    browserify({
        entries: 'js/app.js',
        debug: true
    })
    .transform(babelify, { presets: ['es2015'] })
    .on('error',gutil.log)
    .bundle()
    .on('error',gutil.log)
    .pipe(source('compile.js'))
    .pipe(gulp.dest('js'));
});

gulp.task('default', ['es6']);

编辑2:

package.json:

代码语言:javascript
复制
{
  "name": "es6",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-preset-es2015": "^6.16.0",
    "babelify": "^7.3.0",
    "browserify": "^13.1.0",
    "gulp": "^3.9.1",
    "gulp-uglify": "^2.0.0",
    "gulp-util": "^3.0.7",
    "pump": "^1.0.1",
    "vinyl-source-stream": "^1.1.0"
  },
  "browser": {
    "jquery": "./node_modules/jquery/dist/jquery.js",
  },
  "browserify-shim": {
    "jquery": "$", // or change it to jQuery
  },
  "browserify": {
    "transform": [
      "browserify-shim"
    ]
  }
}

错误:

开始建造..。events.js:160抛出er;//未处理的“错误”事件^ 错误: SyntaxError:解析JSON文件时json中位于526位置的意外令牌}

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-10-10 10:43:01

通常,在import中进行的破坏是不正确的,因为$jQuery对象是主要对象:

代码语言:javascript
复制
import $ from 'jquery';

// or
import jQuery from 'jquery'

在您的示例中,您正在处理一个模块(boostrap-transition),它确实希望使用全局范围中的jQuery。不久前,我在materialize模块上也遇到了类似的问题。

如果您正在使用webpack,您可以遵循@galkowskit回答步骤。

如果您使用的是browserify,您需要的是一个browserify transform,如下所示:

代码语言:javascript
复制
"browser": {
  "jquery": "./node_modules/jquery/dist/jquery.js",
},
"browserify-shim": {
  "jquery": "$", // or change it to jQuery
},
"browserify": {
  "transform": [
    "browserify-shim"
  ]
}

您可以将其放入您的package.json文件中:当Gulp要调用browserify时,它将读取您的package.json的配置提示,并为jQuery执行此shim。

票数 2
EN

Stack Overflow用户

发布于 2017-05-11 03:01:45

我试过这个answer,它成功了。

代码语言:javascript
复制
// webpack.config.js
module.exports = {
    ...
    plugins: [
        new webpack.ProvidePlugin({
           $: "jquery",
           jQuery: "jquery"
       })
    ]
};

票数 4
EN

Stack Overflow用户

发布于 2016-10-10 09:34:59

在Webpack中,我通常使用(webpack.config.js):

代码语言:javascript
复制
externals: {
  jquery: "jQuery"
}

然后:

代码语言:javascript
复制
import jQuery from 'jQuery';

你也可以尝试:

代码语言:javascript
复制
import * as jQuery from 'jQuery';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39954720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档