有没有办法使用 Gulp 中另一个包的默认导出并在输出中保留任务名称?
Is there a way to use a default export from another package in Gulp and retain task names in the output?
背景
我在多个 Git 存储库中使用 Gulp 来构建 NPM 包。我不希望 Gulp 任务在每个存储库中重复,因此我创建了一个单独的包来存储通用 Gulp 逻辑。我还使用 @babel/preset-env
转译 gulpfile.babel.js
以便能够使用 ES2015。
代码
npm link
为简洁起见排除了命令。
// babel.config.js from both packages
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current'
}
}
]
]
};
我的-gulp-任务包
// index.js
import { series } from 'gulp';
export function clean (cb) {
console.log('cleaned');
cb();
}
export function build (cb) {
console.log('built');
cb();
}
export const defaultTask = series(clean, build);
// gulpfile.babel.js
export { defaultTask as default } from '.';
我的其他库包
// babel-register.js
require('@babel/register')({
ignore: [/node_modules\/(?!my-gulp-tasks)/]
});
// .gulp.json
{
"flags": {
"require": [
"./babel-register.js"
]
}
}
// gulpfile.js
export { defaultTask as default } from 'gulp-tasks';
预期
Gulp in my-gulp-tasks
记录以下内容(如预期):
Starting 'default'...
Starting 'clean'...
cleaned
Finished 'clean' after 1.98 ms
Starting 'build'...
built
Finished 'build' after 1.3 ms
Finished 'default' after 6.89 ms
但是,my-other-lib
中的 Gulp 记录了以下内容:
Starting 'default'...
cleaned
built
Finished 'default' after 9.21 ms
我认为当使用相同的 Gulp 参数时,它们应该都记录相同的系列任务名称(在本例中为 none)。我也试过在 clean
和 build
任务上设置 displayName
但它似乎没有什么区别。
问题
这是 Gulp 中的错误还是我只是缺少一些配置?我假设它与转译有关,但我一直无法弄清楚。
有趣的是,这似乎只有在使用 npm link
时才会发生。我发布了包含 gulp 任务的包,一旦我从存储库安装了该版本,问题就消失了。现在我猜这与我正在使用的 @babel/register
ignore
正则表达式有关。尽管如此,我对它仅在已安装的软件包中工作感到满意,因为我主要关心的是如果任务失败在 CI 环境中进行故障排除。
背景
我在多个 Git 存储库中使用 Gulp 来构建 NPM 包。我不希望 Gulp 任务在每个存储库中重复,因此我创建了一个单独的包来存储通用 Gulp 逻辑。我还使用 @babel/preset-env
转译 gulpfile.babel.js
以便能够使用 ES2015。
代码
npm link
为简洁起见排除了命令。
// babel.config.js from both packages
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current'
}
}
]
]
};
我的-gulp-任务包
// index.js
import { series } from 'gulp';
export function clean (cb) {
console.log('cleaned');
cb();
}
export function build (cb) {
console.log('built');
cb();
}
export const defaultTask = series(clean, build);
// gulpfile.babel.js
export { defaultTask as default } from '.';
我的其他库包
// babel-register.js
require('@babel/register')({
ignore: [/node_modules\/(?!my-gulp-tasks)/]
});
// .gulp.json
{
"flags": {
"require": [
"./babel-register.js"
]
}
}
// gulpfile.js
export { defaultTask as default } from 'gulp-tasks';
预期
Gulp in my-gulp-tasks
记录以下内容(如预期):
Starting 'default'...
Starting 'clean'...
cleaned
Finished 'clean' after 1.98 ms
Starting 'build'...
built
Finished 'build' after 1.3 ms
Finished 'default' after 6.89 ms
但是,my-other-lib
中的 Gulp 记录了以下内容:
Starting 'default'...
cleaned
built
Finished 'default' after 9.21 ms
我认为当使用相同的 Gulp 参数时,它们应该都记录相同的系列任务名称(在本例中为 none)。我也试过在 clean
和 build
任务上设置 displayName
但它似乎没有什么区别。
问题
这是 Gulp 中的错误还是我只是缺少一些配置?我假设它与转译有关,但我一直无法弄清楚。
有趣的是,这似乎只有在使用 npm link
时才会发生。我发布了包含 gulp 任务的包,一旦我从存储库安装了该版本,问题就消失了。现在我猜这与我正在使用的 @babel/register
ignore
正则表达式有关。尽管如此,我对它仅在已安装的软件包中工作感到满意,因为我主要关心的是如果任务失败在 CI 环境中进行故障排除。