Gulp 3.9 + Browserify 11.2 到 Gulp 4.0 + Browserify 17.0

如何解决Gulp 3.9 + Browserify 11.2 到 Gulp 4.0 + Browserify 17.0

我正在尝试将使用 Gulp 3.9.1 + browserify 11.2.0 的旧存储库更新为 Gulp 4.0.2 + browserify 17.0.0。但这些并不是我在这个项目中使用的唯一包。

这是 package.json 和我试图移植到新版本的旧代码:

package.json:

"devDependencies": {
    "babel": "^5.8.29","babel-cli": "^6.22.2","babel-preset-es2015": "^6.22.0","babelify": "^6.4.0","browserify": "^11.2.0","core-js": "^1.2.3","extend": "^3.0.0","fs": "0.0.2","glslify": "^2.3.1","gsap": "^1.18.0","gulp": "^3.9.1","gulp-babel": "^5.2.1","gulp-connect": "^2.2.0","gulp-imagemin": "^3.1.1","gulp-newer": "^1.3.0","gulp-streamify": "^1.0.2","gulp-uglify": "^1.5.3","uglify-js": "^2.5.0","vinyl-source-stream": "^1.1.0"
  }

代码:

const gulp = require('gulp')
const source = require('vinyl-source-stream')
const browserify = require('browserify')
const uglify = require('gulp-uglify')
const streamify = require('gulp-streamify')
const babelify = require("babelify");


gulp.task('build',function(){
  build();
});


function build() {
  browserify('src/index.js',{debug: true})
    .transform(babelify)
    .transform('glslify')
    .bundle()
    .on('error',function (err) {
      console.log('Error : ' + err.message);
    })
    .pipe(source('index.min.js'))
    .pipe(streamify(uglify()))
    .pipe(gulp.dest('public/js'));
}

package.json 和我到现在为止的代码,我不确定它是否是正确的实现:

package.json:

"devDependencies": {
    "babel": "^6.23.0","babel-cli": "^6.18.0","babel-preset-env": "^1.7.0","browserify": "^17.0.0","glslify": "^7.1.1","gsap": "^3.6.1","gulp": "^4.0.2","gulp-babel": "^8.0.0","gulp-imagemin": "^7.1.0","gulp-map": "^0.0.2","vinyl": "^0.5.3","vinyl-source-stream": "^1.1.0"
  }

代码:

const gulp = require('gulp');
const browserify = require('browserify');
const babel = require('gulp-babel');
const glslify = require('glslify')
const source = require('vinyl-source-stream');
const streamify = require('gulp-streamify');
const uglify = require('gulp-uglify');
const map = require('gulp-map');
const Vinyl = require('vinyl');

gulp.task(build)

function build() {
  gulp.src(['./src/**/*.js','./src/**/*.jsx'])
    .pipe(browserify()
        .transform(babel({options: 'env'}))
        //.transform(glslify('./src/shaders/simple.vert')) // Not working
        //.transform(glslify('./src/shaders/water.frag')) // Not working
        .bundle().on('error',onError))
    .pipe(source('index.min.js'))
    .pipe(streamify(uglify()))
    .pipe(map(function(file) {
      // Explicitly convert to Vinyl object otherwise `gulp.dest()` will fail
      return new Vinyl(file); // But it stills failing
    }))
    .pipe(gulp.dest('./public/js/'));
}

function onError(err) {
  console.log('Error : ' + err.message);
}

我不确定这是否是迁移该代码的正确方法。我从不同的 browserify 模块中遇到了几个问题,例如:

  • babel:似乎可以通过从 babelify 更改为 gulp-bable 来修复
  • glslify:它似乎已被弃用,但我不知道哪个是替换库

另外,很抱歉重复,因为我不知道迁移应该如何,我在运行构建命令 (gulp build) 后收到此错误:

[14:08:34] Using gulpfile ~/Documents/workspace/project/gulpfile.js
[14:08:34] Starting 'build'...
[14:08:34] 'build' errored after 109 ms
[14:08:34] TypeError: dest.write is not a function
    at DestroyableTransform.ondata (/Users/user/Documents/workspace/project/node_modules/readable-stream/lib/_stream_readable.js:619:20)
    at DestroyableTransform.emit (node:events:379:20)
    at DestroyableTransform.EventEmitter.emit (node:domain:532:15)
    at addChunk (/Users/user/Documents/workspace/project/node_modules/readable-stream/lib/_stream_readable.js:291:12)
    at readableAddChunk (/Users/user/Documents/workspace/project/node_modules/readable-stream/lib/_stream_readable.js:278:11)
    at DestroyableTransform.Readable.push (/Users/user/Documents/workspace/project/node_modules/readable-stream/lib/_stream_readable.js:245:10)
    at DestroyableTransform.Transform.push (/Users/user/Documents/workspace/project/node_modules/readable-stream/lib/_stream_transform.js:148:32)
    at Pumpify.onReadable (/Users/user/Documents/workspace/project/node_modules/to-through/index.js:25:14)
    at Pumpify.emit (node:events:379:20)
    at Pumpify.EventEmitter.emit (node:domain:532:15)

抱歉解释太长,希望有人能帮帮我。

解决方法

经过大量研究,我发现 this blog 有答案,或者几乎有答案的链接。

其中一个链接将我带到了关于 Gulp + Browserify + Babelify 它可能存在的最详细的教程。 Here the link。这些是一系列教程,解释了如何实施 Gulp from Scratch。如果您不想观看视频而只想查看代码,请转到 here

This 是我最后的 gulpfile.js

这是我问题的答案:

我以前在 gulpfile.js(现在称为 js)中构建函数

function js(done) {
  jsFiles.map( function( entry ) {
    return browserify({
      entries: [constants.jsSRC + entry] // constants.jsSRC == "./src/js/"
    })
      .transform( babelify,{ presets: [ '@babel/preset-env' ] } )
      .transform('glslify')
      .bundle()
      .pipe(source( entry ) )
      .pipe(rename( {
        extname: '.min.js'
      }))
      .pipe(buffer() )
      .pipe(gulpif( options.has( 'production' ),stripDebug() ) )
      .pipe(sourcemaps.init({ loadMaps: true }) )
      .pipe(uglify())
      .pipe(sourcemaps.write( '.' ))
      .pipe(dest(constants.jsURL)) // constants.jsURL == "./dist/js/"
      .pipe(browserSync.stream());
  });
  done();
}

任务在同一个文件 gulpfile.js

task("js",js);

我的 package.json 文件。

...
"devDependencies": {
    "@babel/core": "^7.13.14","@babel/preset-env": "^7.13.12","babelify": "^10.0.0","browser-sync": "^2.26.14","browserify": "^17.0.0","browserify-shim": "^3.8.14","core-js": "^1.2.3","glslify": "^7.1.1","gsap": "^3.6.1","gulp": "^4.0.2","gulp-connect": "^2.2.0","gulp-if": "^3.0.0","gulp-notify": "^3.2.0","gulp-options": "^1.1.1","gulp-plumber": "^1.2.1","gulp-rename": "^2.0.0","gulp-sourcemaps": "^3.0.0","gulp-strip-debug": "^4.0.0","gulp-uglify": "^1.5.3","gulp-uglifycss": "^1.1.0","vinyl-buffer": "^1.0.1","vinyl-source-stream": "^2.0.0"
  },"babel": {
    "presets": [
      "@babel/preset-env"
    ]
  },"browserify": {
    "transform": [
      "browserify-shim"
    ]
  },...

请注意,还需要一个 babel 部分和一个 browserify 部分。

并且要运行 gulp 任务,只需执行以下操作:

gulp js

最后一件事,教程示例(感谢 Alessandro Castellani)和我的最终解决方案大体相同,还包含处理 css 文件、字体、图像和 html 文件的其他任务。所有这些文件都被移动到一个“生产”文件夹中,在我的例子中称为 dist

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-