如何使用 "dart pub global run" 命令 运行 脚本?

How to run a script using "dart pub global run" command?

我的包目录foo:

pubspec.yaml 文件有:

name: foo

executables:
  foo: bar

软件包 foo 使用 dart pub global activate ... 激活,如果我将目录添加到 PATH 环境,则以下命令有效:

foo bar

但如果我删除它,并尝试 运行 dart pub global run 命令,它不起作用。

me@mac foo % dart pub global run foo bar
Could not find bin/foo.dart.

那么,我如何 运行 一个脚本,而不按照建议 here.

使用 dart pub global run 将它添加到 PATH

You can directly run a script from an activated package from the command line. If you are unable to run the script directly, you can also use dart pub global run.

注意dart pub global run foo:bar 有效,但这与 pubspec.yaml 文件中定义的可执行文件无关。

指定:

executables:
  foo: bar

表示当包被激活时,命令foo将映射到文件bar.dart。调用时无需指定bar

例如,我有这个包裹:

name: dictionary
...
executables:
    scrabble:

它定义了一个调用 scrabble.dart 的可执行文件 scrabble。我这样激活它:

dart pub global activate --source path dictionary

此报告:

...
Installed executable scrabble.
Activated dictionary 1.0.0 at path "[...]\Dart\dictionary".

我可以调用调用 scrabble.dartscrabble 命令。我也可以这样调用它:

dart pub global run dictionary:scrabble

如果我的 pubspec 有:

executables:
    dictionary: scrabble

然后命令 dictionary 调用文件 scrabble.dart.

(不要忘记在 PATH 上包含 pub 缓存。对 Windows 的我来说,这是 C:\Users\pohara\AppData\Roaming\Pub\Cache\bin

加法: 继续 dictionary: scrabble 示例,当我激活字典时,我得到:

...
Installed executable dictionary.
Activated dictionary 1.0.0 at path "[...]\Dart\dictionary".

我在 Windows 上的 pub 缓存有这个文件到 运行 dictionary 命令:

> cat C:\Users\pohara\AppData\Roaming\Pub\Cache\bin\dictionary.bat
@echo off
rem This file was created by pub v2.12.2.
rem Package: dictionary
rem Version: 1.0.0
rem Executable: dictionary
rem Script: scrabble
pub global run dictionary:scrabble %*

所以命令 dictionary 显式地 运行 是 dictionary 包中的 scrabble 文件。

这两个命令都失败了:

> dart pub global run dictionary scrabble
Could not find bin\dictionary.dart.

> dart pub global run dictionary
Could not find bin\dictionary.dart.

当然这个成功了:

> dart pub global run dictionary:scrabble

这与文档一致 https://dart.dev/tools/pub/pubspec#executables