Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 吞下两倍于内容物的海螺_Javascript_Gulp - Fatal编程技术网

Javascript 吞下两倍于内容物的海螺

Javascript 吞下两倍于内容物的海螺,javascript,gulp,Javascript,Gulp,这对我来说是一件奇怪的事情,我有一个任务来浓缩我的.js文件,然后用一个观察者来丑化它们,但是concat任务只是每次调用中内容的两倍 这是我的gulpfile: 'use strict'; let gulp = require('gulp'); let stylus = require('gulp-stylus'); let sourcemaps = require('gulp-sourcemaps'); let concat = require('gul

这对我来说是一件奇怪的事情,我有一个任务来浓缩我的
.js
文件,然后用一个观察者来丑化它们,但是
concat
任务只是每次调用中内容的两倍

这是我的gulpfile:

'use strict';

let gulp        = require('gulp');
let stylus      = require('gulp-stylus');
let sourcemaps  = require('gulp-sourcemaps');
let concat      = require('gulp-concat');
let uglify      = require('gulp-uglify');
let plumber     = require('gulp-plumber');
let bootstrap   = require('bootstrap-styl');
let rupture     = require('rupture');
let copy        = require('gulp-copy2');

/*
  Prepare the paths
*/
let base = './theme';
let themeName = 'own-theme';

let paths = {
  stylus    : `${base}/${themeName}/css`,
  js        : `${base}/${themeName}/js`,
  vendor    : `${base}/${themeName}/js/vendor`
}

/*
  Stylus compile
*/
gulp.task('stylus-compile', () => {
  return gulp.src([`${paths.stylus}/dev/*.styl`, `${paths.stylus}/!**/_*.styl`])
    .pipe(plumber())
    .pipe(stylus({
      use: [bootstrap(), rupture()],
      compress: true
    }))
    .pipe(sourcemaps.write('./'))
    .pipe(gulp.dest(`${paths.stylus}`));
});

/*
  Get the bootstrap-styl js files and concat/uglify them
*/

gulp.task('bootstrap-build', () => {
  return gulp.src([
    'node_modules/bootstrap-styl/js/transition.js',
    'node_modules/bootstrap-styl/js/alert.js',
    'node_modules/bootstrap-styl/js/button.js',
    'node_modules/bootstrap-styl/js/carousel.js',
    'node_modules/bootstrap-styl/js/collapse.js',
    'node_modules/bootstrap-styl/js/dropdown.js',
    'node_modules/bootstrap-styl/js/modal.js',
    'node_modules/bootstrap-styl/js/tooltip.js',
    'node_modules/bootstrap-styl/js/popover.js',
    'node_modules/bootstrap-styl/js/scrollspy.js',
    'node_modules/bootstrap-styl/js/tab.js',
    'node_modules/bootstrap-styl/js/affix.js'
  ])
  .pipe(sourcemaps.init())
  .pipe(concat('bootstrap.min.js'))
  .pipe(uglify())
  .pipe(sourcemaps.write('./'))
  .pipe(gulp.dest(`${paths.vendor}`));

});

/*
  Get the js assets from NPM
*/
gulp.task('js-copy', () => {
  let dirs = [
    { src: 'node_modules/jquery/dist/jquery.min.js', dest: `${paths.vendor}/jquery.min.js` },
    { src: 'node_modules/sweet-scroll/sweet-scroll.min.js', dest: `${paths.vendor}/sweet-scroll.min.js` }
  ]
    return copy(dirs);
});

/*
  Concat/Uglify the JS files
*/
gulp.task('js-build', () => {
return gulp.src(`${paths.js}/*.js`)
  .pipe(sourcemaps.init())
  .pipe(concat('site.min.js'))
  // .pipe(uglify())
  .pipe(sourcemaps.write('./'))
  .pipe(gulp.dest(`${paths.js}`));
})

/*
  Watch
*/
gulp.task('watch', () => {
  gulp.watch(`${paths.js}/*.js`, ['js-build']);
  gulp.watch(`${paths.stylus}/dev/*.styl`, ['stylus-compile']);
});

gulp.task('default', ['bootstrap-build', 'js-copy', 'watch']);
无论调用任务多少次,
bootstrap build
任务都不会使内容增加两倍,但是
js build

以下是concat的测试分离脚本和结果:

文件1:

(function() {

  console.log("oh!")
  console.log("uh!")

}).call(this);
文件2:

(function() {
  console.log("hey")
}).call(this);
浓缩文件(呃,哦,在监视者被解雇后重新保存的文件):

在每次重新保存时,concat会将内容增加一倍。。。我真的不明白这个问题。有什么想法吗


感谢adnvance。

您的
引导构建之所以有效,是因为它将生成的
bootstrap.min.js
放在与源文件不同的文件夹中

但是,您的
js build
任务将连接
path.js
文件夹中的所有
.js
文件,并将生成的
site.min.js
放在同一文件夹中

这意味着当第一次运行
jsbuild
时,文件
file1.js
file2.js
被连接到
site.min.js
。在第二次运行时,文件
file1.js
file2.js
site.min.js
被连接到
site.min.js
。每次运行
jsbuild
任务时,您的
site.min.js
都会增长

您需要做的是将
site.min.js
从与其他文件的连接中排除:

gulp.task('js-build',()=>{
回灌([
`${path.js}/*.js`,
`!${path.js}/site.min.js`
])
.pipe(sourcemaps.init())
.pipe(concat('site.min.js'))
//.管道(丑()
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest(`${paths.js}`));
})

您的
引导构建之所以有效,是因为它将生成的
bootstrap.min.js
放在与源文件不同的文件夹中

但是,您的
js build
任务将连接
path.js
文件夹中的所有
.js
文件,并将生成的
site.min.js
放在同一文件夹中

这意味着当第一次运行
jsbuild
时,文件
file1.js
file2.js
被连接到
site.min.js
。在第二次运行时,文件
file1.js
file2.js
site.min.js
被连接到
site.min.js
。每次运行
jsbuild
任务时,您的
site.min.js
都会增长

您需要做的是将
site.min.js
从与其他文件的连接中排除:

gulp.task('js-build',()=>{
回灌([
`${path.js}/*.js`,
`!${path.js}/site.min.js`
])
.pipe(sourcemaps.init())
.pipe(concat('site.min.js'))
//.管道(丑()
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest(`${paths.js}`));
})

事实上,就这些。。。一件简单的事,但我就是看不见。谢谢你,真的。事实上,就这些。。。一件简单的事,但我就是看不见。谢谢你,真的。
(function() {

  console.log("oh!")
  console.log("uh!")

}).call(this);
(function() {

  console.log("oh!")
  console.log("uh!")

}).call(this);
(function() {
  console.log("hey")
}).call(this);
//# sourceMappingURL=site.min.js.map

(function() {
  console.log("hey")
}).call(this);
//# sourceMappingURL=site.min.js.map