1

我在 gulp 中有一个简单的任务,应该转换 js:

function js() {
  return gulp.src('lib/modules/*/source/js/*.js')
    .pipe(babel({
      presets: ['@babel/env']
    }))
    .pipe(gulp.dest((fileVinyl) => {
      return fileVinyl.path.replace('/source/', '/public/').replace(/[^\/]*js$/, '')
    }))
}

exports.default = gulp.parallel(js)

我有一个这样的文件结构:

lib
- modules
  - module1
    - source
      - js
        - file.js
  - module2
    - source
      - js
        - file.js
  - moduleN (...)

现在,我希望它创建这样的文件:

lib
- modules
  - module1
    - public
      - js
        - file.js
    - source (...)
  - module2
    - public
      - js
        - file.js
    - source (...)
  - moduleN (...)

当然,上面的代码不起作用,它将文件输出到lib/modules/module1/public/js/module1/source/js/. 是否有任何方法可以强制 gulp 将文件输出到指定路径,而不是将其视为附加自己想法的基本路径?

4

2 回答 2

2

我在这里遇到的问题是文件的基础错误。但由于我需要动态更改它,我不能只在src选项中设置它。幸运的是,我可以在dest功能上轻松更改它,我有可用的路径:

 .pipe(gulp.dest((fileVinyl) => {
      //changing the base so that it will include the whole path to the file,
      //excluding the filename
      fileVinyl.base = fileVinyl.path.replace(/[^\/]*js$/, '')

      //outputing the file to a /public/ folder instead of /source/,
      //keeping the structure
      return path.relative(process.cwd(), fileVinyl.path.replace('/source/', '/public/').replace(/[^\/]*js$/, ''))
    }))
于 2019-03-11T15:27:17.363 回答
1

使用basegulp.src中的选项

像这样:

gulp.src('your_file.js', {base: 'your_base_path'})
.pipe(/*...*/)

在你的情况下,base应该是lib/modules

像这样:

gulp.src('lib/modules/**/*.js', {base: 'lib/modules'})
.pipe(/*...*/)
.pipe(gulp.dest('lib/modules'))

这将创建您想要的:

lib
- modules
  - module1
    - public
      - js
        - file.js

此选项告诉 gulp 忽略路径的基本部分并将路径的其余部分视为相对路径,因此将其复制到 dest

于 2019-03-11T14:22:01.043 回答