Dart Pub Global 创建命令行应用程序(Windows)

4,652 阅读4分钟

最近想对项目的里面的route进行改造,看了下阿里的路由注解, 因为没法处理统一处理Package里面的页面.所以想自己来写一套。

思考了下,无非是读文件写文件,本来考虑用C#直接写一个工具的,但是最近看下成为一个优秀程序员的101个小建议中提到 不要选择熟悉的技术,而应该是正确的⭐。 跟大佬了解了一下,决定使用dart写一个命令行应用程序,还可以跨端运行。

美好的一天从抄作业开始,这是财经龙大佬写的Pub Global,按照大佬的步骤,我在窗户儿(Windows)上面也走了下流程,下面我把要注意的说一下。

环境变量

Windows10上面搜寻环境变量,如下图

在Path中增加Dart的路径,我这里是1.1.5版本。

命令行输入

dart --versionpub --version 验证是否环境准备妥当

安装dart脚手架

stagehand,其实也是一个dart的命令行应用程序,帮助你创建命令行应用

在Path当中添加pub cache的路径,做flutter的小伙伴应该已经配置过了

C:\Users\xxxx\AppData\Roaming\Pub\Cache\bin

命令行输入 pub global activate stagehand 激活stagehand

安装完毕之后可以在你的账号的AppData里面找到它

其实你不安装这个也行,用Android Studio创建一个Package,然后把flutter sdk从yaml文件中移除就好了。安装这个就是为了方便创建一个命令行程序。

创建项目

cd 到你的创建的一个目录里面,执行

stagehand console-full

然后执行下 pub get,把依赖都下载一下。

项目结构

用vscode打开

入口为main.dart,点击debug运行,打印42

修改main.dart,打印参数,使用命令行执行 dart bin/main.dart 1234 5678

内裤

测试,Run和Debug可以点击,很明显6*7=42,所以测试会通过

本地安装

执行下面命令,./表示当前目录,你也可以写绝对路径 pub global activate --source path ./

安装完毕之后可以在你的账号的AppData里面找到它

执行

pub global run pub_demo

报错提示找不到 pub_demo.dart。这里要提一下,因为是以pub_demo进行安装的,所以默认入口为pub_demo.dart,那么我们稍加一些改动。补充:你这里可以将executables设置为main就可以了

我们在bin下面增加一个pub_demo.dart,增加main入口,并且直接执行main.dart的main函数

然后我们重新安装一下,再次执行

生成应用程序

在pubspec.yaml文件中加入

executables:
  pub_demo:

然后执行安装命令 pub global activate --source path ./ 你会发现多一行 Installed executable pub_demo.

现在你就可以直接执行 pub_demo

发布

你可以通过命令将你的包发布到pub上面去,记得打开那个墙。。。 flutter packages pub publish --server=https://pub.dartlang.org

这里我简单做了一个assets_generator命令行工具,用来自动生成yaml文件中关于assets的配置信息的。 前景是我的混合开发项目,在ios端第一次安装启动的时候资源文件显示不出来,必须杀掉程序重新进才行。听网友说不能直接写到文件夹,要定义到文件。我的乖乖那多麻烦,所以就想着写了这个工具,然后并没有卵用(最后发生资源文件的个数居然会影响,我相信这一定是一个bug)。

我发布上去之后,你可以这样使用,在pubspec.yaml中引入

dev_dependencies:
  assets_generator: ^1.1.1 

然后get一下依赖

然后执行,就可以自动pubspec.yaml中生成相关配置信息了。

  • assets_generator path=xxxx type=0
ParameterDescriptionDefault
path项目路径如果不加默认为当前路径
type生成信息方式: 0 = 文件夹 ; 1 = 文件0

结语

命令行应用程序还是蛮简单的,跟C#里面的命令行程序没什么区别,适合做一些脚本,让双手释放出来。

最后放上 assets_generator,欢迎加入Flutter Candies,一起生产可爱的Flutter 小糖果

最最后放上Flutter Candies全家桶,真香。