现在 Deno 2 支持 npm,我正在尝试在 Deno 2 中使用 gulp。但是我遇到了奇怪的行为,这让我怀疑这是否可行。我将提供稍后使用的步骤列表,但首先,这是我的 gulpfile.js 和我所看到的行为:
import {series} from 'gulp';
// ----------------------------
export const clean = (cb) => {
console.log("CLEANING UP");
cb();
}
export const compile = (cb) => {
console.log("COMPILING");
cb();
}
export const build = (cb) => {
series(clean, compile);
cb();
}
使用 git bash shell:
$ gulp clean
[08:53:17] Using gulpfile ~\gulp\gulpfile.js
[08:53:17] Starting 'clean'...
CLEANING UP
[08:53:17] Finished 'clean' after 3.34 ms
$ gulp compile
[08:53:26] Using gulpfile ~\gulp\gulpfile.js
[08:53:26] Starting 'compile'...
COMPILING
[08:53:26] Finished 'compile' after 2.5 ms
$ gulp build
[08:53:30] Using gulpfile ~\gulp\gulpfile.js
[08:53:30] Starting 'build'...
[08:53:30] Finished 'build' after 3.03 ms
如您所见,当运行名为“clean”和“compile”的任务时,文本会输出到控制台。但是,当通过 series() 函数运行任务时,终端不会输出任何内容。这让我想知道各个任务是否正在运行。
以下是我在 git bash shell 中使用的步骤,从我的主目录开始:
$ mkdir gulp
$ cd gulp
$ deno init
$ npm install -g gulp-cli // unless you already have gulp's CLI installed
$ deno install npm:gulp
然后,创建上面的
gulpfile.js
并按上面的方式运行 gulp 任务。
我认为奇怪的一件事,可能是一个线索,是即使在运行
deno install npm:gulp
之前,因此在我的项目中本地安装 gulp,执行 gulp --version
产生:
$ gulp --version
CLI version: 3.0.0
Local version: 5.0.0
我没想到会看到本地版本,因为我是在一个全新的文件夹中创建一个全新的项目。
(如果您愿意,可以随时停止阅读)为什么首先将 gulp 与 Deno 结合使用?
答案:我想用代码定义我的任务,即 JavaScript、TypeScript,或者在我的例子中是 civet。在我的
tasks
文件中使用 Deno 的 deno.json
键是很痛苦的,除非你的任务非常简单。如果我可以直接在 deno.json 文件中执行此操作,那就太好了,但 JSON 不允许函数作为值。就我个人而言,我认为 JSON 很糟糕。 JSONC 有一点改进,因为它允许注释和尾随逗号,但仍然不允许函数。我希望 Deno 允许我创建一个 deno.js
文件 - 或者 deno.ts
如果您愿意的话。它可以很容易地检查,例如函数作为值仅出现在“tasks”键下,已授予必要的权限等。然后(如果提供了函数series()、parallel()等)就不需要外部构建系统.
针对问题的最后一段,值得注意的是,Deno 2.1 引入了 任务依赖项,它允许直接在
deno.json
文件中进行更复杂的任务定义。此功能使开发人员能够定义任务之间的依赖关系,确保某些任务先于其他任务执行。
例如,您可以创建一个脚本来解决您概述的问题,然后通过在
deno task.ts
文件中指定 deno.json
命令来将其作为依赖项运行。这种方法可以帮助您实现所需的行为,尽管是间接的。