Browserify with twitter bootstrap

前端 未结 4 1523
萌比男神i
萌比男神i 2020-12-22 21:32

There are many similar questions including answers here on stack overflow, but none of them have worked for me, so here I am asking you guys. I appreciate everyone\'s time.

相关标签:
4条回答
  • 2020-12-22 21:39

    You shouldn't need to shim jquery that way if you've installed it with npm. The following works for a project I've been writing:

    I've also learned that using npm for bootstrap is kind of a PITA. I've been using bower to install and maintain certain front-end components when they need to be shimmed like this.

    package.json:

    {
      "name": "...",
      "version": "0.0.1",
      "description": "...",
      "repository": {
        "type": "git",
        "url": "..."
      },
      "browser": {
        "d3js": "./bower_components/d3/d3.min.js",
        "select2": "./bower_components/select2/select2.min.js",
        "nvd3js": "./bower_components/nvd3/nv.d3.min.js",
        "bootstrap": "./node_modules/bootstrap/dist/js/bootstrap.js"
      },
      "browserify": {
        "transform": [
          "browserify-shim",
          "hbsfy"
        ]
      },
      "browserify-shim": {
        "d3js": {
          "exports": "d3",
          "depends": [
            "jquery:$"
          ]
        },
        "bootstrap": {
          "depends": [
            "jquery:jQuery"
          ]
        },
        "select2": {
          "exports": null,
          "depends": [
            "jquery:$"
          ]
        },
        "nvd3js": {
          "exports": "nv",
          "depends": [
            "jquery:$",
            "d3js:d3"
          ]
        }
      },
      "devDependencies": {
        "browserify-shim": "~3.4.1",
        "browserify": "~3.36.0",
        "coffeeify": "~0.6.0",
        "connect": "~2.14.3",
        "gulp-changed": "~0.3.0",
        "gulp-imagemin": "~0.1.5",
        "gulp-notify": "~1.2.4",
        "gulp-open": "~0.2.8",
        "gulp": "~3.6.0",
        "hbsfy": "~1.3.2",
        "vinyl-source-stream": "~0.1.1",
        "gulp-less": "~1.2.3",
        "bower": "~1.3.3",
        "cssify": "~0.5.1",
        "gulp-awspublish": "0.0.16",
        "gulp-util": "~2.2.14",
        "gulp-rename": "~1.2.0",
        "gulp-s3": "git+ssh://git@github.com/nkostelnik/gulp-s3.git",
        "gulp-clean": "~0.2.4",
        "process": "~0.7.0"
      },
      "dependencies": {
        "backbone": "~1.1.2",
        "jquery": "~2.1.0",
        "lodash": "~2.4.1",
        "d3": "~3.4.8",
        "rickshaw": "~1.4.6",
        "datejs": "~1.0.0-beta",
        "moment": "~2.7.0"
      }
    }
    

    js:

    $ = jQuery = require('jquery');
    var _ = require('lodash');
    var Rickshaw = require('rickshaw');
    var d3 = require('d3js');
    var nvd3 = require('nvd3js');
    var moment = require('moment');
    require('datejs');
    require('select2');
    
    var bootstrap = require('bootstrap');
    console.log(bootstrap)
    

    Also - one sometimes useful thing is to have browserify-shim output its diagnostics. This is what my browserify.js task looks like:

    var browserify   = require('browserify');
    var gulp         = require('gulp');
    var handleErrors = require('../util/handleErrors');
    var source       = require('vinyl-source-stream');
    var process      = require('process');
    
    process.env.BROWSERIFYSHIM_DIAGNOSTICS=1;
    
    var hbsfy = require('hbsfy').configure({
      extensions: ['html']
    });
    
    gulp.task('browserify', ['images', 'less'], function(){
        return browserify({
          transform: ['hbsfy', 'cssify'],
                entries: ['./src/javascript/app.js'],
            })
            .bundle({debug: true})
            .on('error', handleErrors)
            .pipe(source('app.js'))
            .pipe(gulp.dest('./build/'));
    });
    
    0 讨论(0)
  • 2020-12-22 21:39

    There is error as I am using browserify which require the variable '$' or 'jQuery' to be defined.

    adding the window to make it global resolve the error. Not sure if this would be the correct way to do, if not, let me know.

    window.$ = window.jQuery = require('jquery');
    var bootstrapjs = require('bootstrap-sass');
    
    0 讨论(0)
  • 2020-12-22 21:39

    I've been wondering about this for a while. This simple solution does the job for me:

    import foo from 'foo';
    import bar from './bar';
    import { default as $ } from "jquery";
    global.$ = $;
    global.jQuery = $; // This one does the trick for bootstrap!
    // Boostrap's jQuery dependency only works with require, not with ES6 import!
    const btp = require('bootstrap');
    
    0 讨论(0)
  • 2020-12-22 21:50

    So to make Bootstrap to work with Browserify you're going to need one of Browserify CSS transforms.

    First the index.js (browserify entry)

    // Bootstrap needs jQuery on the Window
    window.jQuery = $  = require('jquery');
    // include popper.js if you want Bootstrap tooltips
    window.Popper = require('popper.js');
    // include bootstrap js libs (not the CSS libs as yet)
    require('bootstrap');
    // then the CSS Lib
    require('bootstrap/dist/css/bootstrap.css');
    

    NPM Installs:

    npm install bootstrap@4.0.0-alpha.6 jquery popper.js
    

    To use tooltips globally:

    Per the Bootstrap docs.

    $('[data-toggle="popover"]').popover();
    

    I have a Browserify-Budo repo here. If you want to see it working.

    0 讨论(0)
提交回复
热议问题