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

时间:2015-03-04 15:41:27

标签: javascript jquery gulp

我有一个使用gulp和browserfy的web项目。 这是我的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 lib。我是否必须再次添加jquery或者还有其他任何解决方案。

1 个答案:

答案 0 :(得分:0)

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

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

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