目录结构
hello/
bin/
main.dart
pubspec.paml
main.dart函数:
void main(List<String> arguments){
print("hello world");
}
Pub 命令
- 使用pub global命令将文件包注册到全局
pub global activate --source path <dart包路径>
运行以上命令显示内容如下:
Activated boilerplate 0.0.1 at path "<path to Dart project>".
- 使用pub global run命令运行注册的脚本文件
pub global run <package>:<script>
- 使用pub global list命令查看全局包列表
pub global list
- 使用pub global deactivate命令释放包
pub global deactivate <package>
使用命令行输入参数
- 获取args依赖
使命令行参数可用,需要引入args包:
// pubspec.yaml
dependencies:
args: '^0.13.2' //冒号后面一定要有空格,否则报错
在main.dart中导入:
import 'package:args/args.dart'; // 使用其中两个类ArgParser和ArgResults
ArgResults argResults; // 声明ArgResults类型的全局变量,保存解析的参数结果
// 同时,argResults也是ArgResults的实例
void main(List<String> arguments) {
// 创建ArgParser的实例,同时指定需要输入的参数
final ArgParser argParser = new ArgParser()
..addOption('name', abbr: 'n', defaultsTo: 'World'); // abbr表示缩写或别名,defaultsTo表示默认值
argResults = argParser.parse(arguments);
final String name = argResults['name'];
print("Hello, $name!");
}
运行程序:
pub global run hello:main -n soojade
在命令行中显示help
final ArgParser argParser = new ArgParser()
..addOption('name', abbr: 'n', defaultsTo: 'World',
help: "Who would you like to greet?")
..addFlag('help', abbr: 'h', negatable: false,
help: "Displays this help information.");
“help”参数通过addFlag()定义;flag 是一个特殊的命令行参数,它是一个Boolean值而不是String。如果flag在命令行中出现,它的值是true。
如下操作“help”标签:
if (argResults['help']) {
print("""
** HELP **
${argParser.usage}
""");
}
// usage显示所有help内容
再次运行程序:
pub global run boilerplate:main --help
结果如下:
** HELP **
-n, --name Who would you like to greet?
(defaults to "World")
-h, --help Displays this help information.
Hello, World!
通过命令行创建文件及内容
使用命令行创建一个html模板:
// main.dart
import 'dart:io'; // io作为dart标准库,用来操作文件,不需要在pubspec.yaml中声明依赖
import 'package:args/args.dart';
ArgResults argResults;
void main(List<String> arguments) {
final ArgParser argParser = new ArgParser()
..addOption('title', abbr: 't',
help: "The title will be inserted into the <title> tag.")
..addOption('filename', abbr: 'f', defaultsTo: 'index.html',
help: "Optional. Output file name. (Default: index.html)");
argResults = argParser.parse(arguments);
final String title = argResults['title'];
if (title == null) {
handleError("Missing required argument: title");
}
else {
final String filename = argResults['filename'];
final String output = """<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>$title</title>
</head>
<body>
</body>
</html>
""";
new File(filename).writeAsStringSync(output);// 为了简单实用了同步版本
stdout.writeln("File saved: $filename");
}
}
// 异步输出错误信息到标准错误流
void handleError(String msg) {
stderr.writeln(msg);
exitCode = 2; //当程序退出,虚拟机检查exitCode,0 表示Success,1 表示Warnings,2 表示Errors
}
可执行程序
任何bin目录下的dart脚本可注册为可执行程序,分为两步:
- 在pubspec.yaml中添加executables部分
executables:
包名: main # 要运行的脚本名称,(注意冒号后面的空格)如果有多个脚本,可以添加多个
- 通过pub global activate 全局注册
pub global activate --source path <包路径>
直接以包名为命令在命令行中输入即可执行。