Browserify与twitter引导
有很多类似的问题,包括堆栈溢出的答案,但没有一个为我工作,所以在这里,我问你们。 我感谢大家的时间。
我最近开始使用浏览器的gulp,这很好。 然后,我尝试使用browserify来使用前端:Backbone和Bootstrap3。
事情似乎工作,直到我试图要求与Bootstrap自带的js文件。 我在我的铬工具中出现错误,指出:jQuery是未定义的。
我试图把它冲进去,但是我很困惑。 我正在使用jQuery 2.1.1,所以我不应该需要填充jQuery,但它现在存在于垫片,因为我绝望,试图一切。 这是我的package.json和我的main.js文件:
————–的package.json ——————
{ "name": "gulp-backbone", "version": "0.0.0", "description": "Gulp Backbone Bootstrap", "main": "main.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Rob Luton", "license": "ISC", "devDependencies": { "jquery": "^2.1.1", "backbone": "^1.1.2", "browserify": "^4.2.1", "gulp": "^3.8.6", "vinyl-source-stream": "^0.1.1", "gulp-sass": "^0.7.2", "gulp-connect": "^2.0.6", "bootstrap-sass": "^3.2.0", "browserify-shim": "^3.6.0" }, "browser": { "bootstrap": "./node_modules/bootstrap-sass/assets/javascripts/bootstrap.js", "jQuery": "./node_modules/jquery/dist/jquery.min.js" }, "browserify": { "transform": ["browserify-shim"] }, "browserify-shim": { "jquery": "global:jQuery", "bootstrap": { "depends": [ "jQuery" ] } } }
————————- main.js ———————-
var shim = require('browserify-shim'); $ = require('jquery'); var Backbone = require('backbone'); Backbone.$ = $; var bootstrap = require('bootstrap'); /* the following logs fine if I comment out the bootstrap require, otherwise I get 'jQuery undefined' */ console.log(Backbone); $(function() { alert('jquery works'); });
如果你已经用npm安装了,你不需要用jquery来填充。 以下为我一直在写的项目:
我也了解到,使用npm作为bootstrap是一种PITA。 我一直在使用鲍尔来安装和维护某些前端组件,当他们需要像这样的垫片。
的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)
另外 – 有时候有用的是让browserify-shim输出它的诊断信息。 这就是我的browserify.js任务的样子:
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/')); });
我使用browserify时出现错误,需要定义variables“$”或“jQuery”。
添加窗口使其全局解决错误。 不知道这是否是正确的做法,如果没有,让我知道。
window.$ = window.jQuery = require('jquery'); var bootstrapjs = require('bootstrap-sass');
我一直在想这件事。 这个简单的解决scheme为我做的工作:
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');
因此,要使Bootstrap
与Browserify
一起Browserify
您需要使用Browserify CSS转换之一 。
首先index.js( browserify
条目)
// 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安装 :
npm install bootstrap@4.0.0-alpha.6 jquery popper.js
全局使用工具提示 :
根据Bootstrap 文档 。
$('[data-toggle="popover"]').popover();
我有一个Browserify-Budo回购在这里 。 如果你想看到它的工作。