使用 gulp 和 browserify 从脚本文件进程访问 Jquery 库

Access to Jquery library from a script file process with gulp and browserfy

我有一个使用 gulp 和 browserfy 的网络项目。 这是我的 gulpfile.js

     var gulp = require('gulp'),
    gutil = require('gulp-util'),
    browserify = require('gulp-browserify'),
    compass = require('gulp-compass'),
    connect = require('gulp-connect'),
    gulpif = require('gulp-if'),
    uglify = require('gulp-uglify'),
    minifyHTML = require('gulp-minify-html'),
    concat = require('gulp-concat');
    path = require('path');

var env,
    jsSources,
    sassSources,
    htmlSources,
    outputDir,
    sassStyle;

env = 'development';

if (env==='development') {
  outputDir = 'builds/development/';
  sassStyle = 'expanded';
} else {
  outputDir = 'builds/production/';
  sassStyle = 'compressed';
}

jsSources = [
 'components/scripts/jqloader.js',
 'components/scripts/supersized.core.min.js',
 'components/scripts/slidebars.js',
 'components/scripts/doubletaptogo.js',
  'components/scripts/script.js'
];
sassSources = ['components/sass/style.scss'];
htmlSources = [outputDir + '*.html'];

gulp.task('js', function() {
  gulp.src(jsSources)
    .pipe(concat('script.js'))
    .pipe(browserify())
    .on('error', gutil.log)
    .pipe(gulpif(env === 'production', uglify()))
    .pipe(gulp.dest(outputDir + 'js'))
    .pipe(connect.reload())
});

gulp.task('compass', function() {
  gulp.src(sassSources)
    .pipe(compass({
      sass: 'components/sass',
      css: outputDir + 'css',
      image: outputDir + 'images',
      style: sassStyle,
      require: ['susy', 'breakpoint']
    })
    .on('error', gutil.log))
//    .pipe(gulp.dest( outputDir + 'css'))
    .pipe(connect.reload())
});

gulp.task('watch', function() {
  gulp.watch(jsSources, ['js']);
  gulp.watch(['components/sass/*.scss', 'components/sass/*/*.scss'], ['compass']);
  gulp.watch('builds/development/*.html', ['html']);
});

gulp.task('connect', function() {
  connect.server({
    root: outputDir,
    livereload: true
  });
});

gulp.task('html', function() {
  gulp.src('builds/development/*.html')
    .pipe(gulpif(env === 'production', minifyHTML()))
    .pipe(gulpif(env === 'production', gulp.dest(outputDir)))
    .pipe(connect.reload())
});

// Copy images to production
gulp.task('move', function() {
  gulp.src('builds/development/images/**/*.*')
  .pipe(gulpif(env === 'production', gulp.dest(outputDir+'images')))
});

gulp.task('default', ['watch', 'html', 'js', 'compass', 'move', 'connect']);

我的 html 是:

<!doctype html>
<html>
<head>


</head>
<body >
<div id="divExample"></div>
  <script src="js/script.js"></script>
<script>alert($("divExample").width());</script>



</body>
</html>

我得到一个错误,$ 没有定义,但它在脚本中定义了。我不确定我是否可以使用脚本中包含的 jquery 库。如果不是,我应该如何使用 jquery 库。我是否必须再次添加 jquery 或有任何其他解决方案。

当您在 browserify 中执行 var $ = require('jquery') 时,它将无法在该文件之外使用。每当您在另一个文件中需要 jQuery 时,您需要再次执行 var $ = require('jquery') (别担心,它只会包含一次)。您不应在该文件之外访问使用 browserify 编译的任何内容。我推荐阅读这篇文章,它有点长但非常值得。

https://github.com/substack/browserify-handbook

如果你想在 browserify 中定义全局变量,你可以查看这个答案:Defining global variable for Browserify