npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@wecteam/dm-cli

v1.0.6

Published

小程序开发工具

Downloads

6

Readme

dm-cli

用于前端项目的脚手架,内置了一套完整的用于小程序开发的插件,包含文件(函数)依赖分析、智能分包、条件编译、项目审计、打包上传等功能,旨在提升小程序开发效率及质量。

安装

npm install -g @wecteam/dm-cli

ChangeLog

详见ChangeLog

加入开发

使用说明

dm查看子命令说明

Usage: dm <command> [options]

Options:
  -V, --ver  output the version number
  -h, --help     output usage information

Commands:
  build|b        小程序编译
  new|n          新建页面或组件
  preview|p      预览小程序,生成二维码
  audit|a        项目审计
  config|c <cmd> 用户级配置
  help [cmd]     display help for [cmd]

dm help [cmd] 查看子命令参数,如:dm help new

Usage: dm new [options]

Options:
  -t, --type [value]  新建类型(page|component)
  -n, --name [value]  名称
  -h, --help          output usage information

命令说明

小程序编译:dm build

dm build build 命令会依次做 wxss 转换、文件分析、npm 下载、npm 构建等(详见设计文档),并最终生成 dm-build 目录作为小程序开发目录。

  • 参数 --page|-p 单页抽取,仅提取指定页面需要的文件(多个使用英文逗号分隔),可以提升开发效率,支持使用配置文件
    dm build -p pages/index/index,pages/seckill/index/index
以下是单页抽取各场景数据对比  

          常规开发   单页抽取
预览耗时    100s     15s
启动耗时    25s      10s
编译耗时    5s       3s
  • 参数 --watch|-w 启动watch模式,注意文件过多时watch会比较慢,注意配合单页抽取一起使用。
    dm build -w

  • 参数 --tabbar 在单页抽取时,保留原生 tab 及 tab 上的页面。
    dm build -p pages/seckill/index/index --tabbar

  • 参数 --app|-a 条件编译,用于同一个工程下存在多个 app 情况,app 参数用于指定要编译哪个 app。
    dm build -a b

  • 参数 --type|-t 条件编译,用于同一个工程下存在多端同构的代码。 参数用于指定要编译哪个场景。
    dm build -t h5

  • 参数 --open|-o 自动启动小程序开发者工具加载编译生成目录(dm build)。
    dm build -o

调用小程序开发者工具需要指定 CLI 路径,详见参数 --wxcli 。

  • 参数 --wxcli 指定微信开发者工具 CLI 路径,详见命令行。macOS默认值为:/Applications/wechatwebdevtools.app/Contents/MacOS/cli,win默认值为空,支持使用配置文件
    dm build --wxcli "D:\\Program Files (x86)\\Tencent\\微信web开发者工具\\cli.bat"

  • 参数 --include|-i 需要额外拷贝的文件,参数值使用glob模式。
    dm build -i "assets/*.png"

  • 参数 --output.build|-d 指定命令生成的目标目录,默认为当前项目的平级目录 dm build 即:../dm build,可使用绝对路径,使用相对路径时,参照路径为 CLI 执行目录。
    dm build -d "../../dm build"

与参数 --app 同时使用时,会在目标目录后加上附加 -{app} 作为区分,如 dm build -d ../../dm build -a b 生成的目录为 dm-build-b 与参数 --type 同时使用时,会在目标目录后加上附加 -{type} 作为区分,如 dm build -d ../../dm build -a b -t h5 生成的目录为 dm-build-b-h5

  • 参数 --release|-r 发布模式,可进行文件压缩、文件修改等操作。 可选用 @wecteam/dm-plugin-minify 插件进行压缩。
    dm build -r

  • 参数 --version|-v 结合-r参数一起使用,指定版本号,一般用于发布。
    dm build -r -v 2.0.0

  • 参数 --js-tree-shaking 函数依赖分析,编译后的目录中,删掉js文件中未使用的函数。
    dm build --js-tree-shaking

  • 参数 --css-tree-shaking 删除无用样式 注:尚在实验阶段 ,未经过完整测试(可能会删掉有用的样式),可以使用此参数并借助 Beyond Compare 等对比工具对比删掉的样式。上线前务必做好验证。
    dm build --css-tree-shaking

新建页面|组件:dm new

dm new new 命令会在当前目录下创建小程序页面或组件所需的文件,以下参数再不指定时,会通过询问的方式提示用户选择。

  • 参数 --type|-t 可选值:page、component ,表示需要创建页面还是组件。
    dm new -t page

  • 参数 --name|-n 页面或者组件名字(文件名)。
    dm new -n index

小程序预览:dm preview

dm preview preview 命令会调用小程序开发者工具的 CLI,在控制台打印二维码。

若预览提示有文件未找到,但实际文件存在时,请尝试先关闭小程序开发者工具,再执行预览命令。

  • 参数 --qr-format|-f 详见命令行,下同
    dm preview -f terminal

  • 参数 --qr-output|-o
    dm preview -n /path/to/qrcode.txt -f base64

  • 参数 --info-output|-i
    dm preview -i /path/to/preview-info.json

  • 参数 --compile-condition|-q
    dm preview -q '{"pathName":"pages/index/index"}'

  • 参数 --page|-p 同 dm build 参数

  • 参数 --app|-a 同 dm build 参数

  • 参数 --output.preview|-d 预览命令文件生成目录,默认值为:../dm-build

小程序上传:dm upload

dm upload upload 命令会调用小程序开发者工具的 CLI,上传代码。

  • 参数 --desc 详见命令行,下同
    dm upload --desc "upload by dm"

  • 参数 --version|-v
    dm upload -v 1.0.0

  • 参数 --info-output|-i
    dm upload -i /path/to/upload-info.json

  • 参数 --app|-a 同 dm build 参数

  • 参数 --output.upload|-d 预览命令文件生成目录,默认值为:../dm-build

小程序审计:dm audit

dm audit 使用audit命令默认会执行两个功能,一是分析项目中的文件依赖关系,输出优化建议;若需要进行重复代码分析,请添加插件@wecteam/dm-plugin-jscpd。

  • 参数 --app|-a 同 dm build 参数
  • 参数 --output.audit|-d audit命令输出目录,默认值为:../dm-audit

全局配置:dm config

dm config 用于设置全局的用户配置,类似 npm config ,配置保存在操作系统的当前用户根目录下,目前的主要配置项为 wxcli(微信小程序 IDE 命令行工具安装路径)。

使用方式:
  $ dm config set <key> <value>
  $ dm config get [key]
  $ dm config delete <key>
  $ dm config list
  • 子命令 list 控制台打印当前所有全局配置项
    dm config list

  • 子命令 set 设置对应配置项的值,需要传递 key 和 value 两个参数,如下。当value中有特殊字符时(空格、斜杠等),带上双引号。
    dm config set wxcli "D:\\Program Files (x86)\\Tencent\\微信web开发者工具\\cli.bat"

  • 子命令 get 获取对应配置项的值,需要指定 key。不指定时与子命令 list 等价
    dm config get wxcli

  • 子命令 delete 删除对应配置项,需要指定 key
    dm config delete wxcli

npm包支持

dm-cli 对 npm 的支持基于官方提供的能力npm支持。在这个基础上添加了低版本兼容及智能分包能力。

使用需知

1、安装依赖 在项目根目录 package.json 中的 dependencies 字段指明依赖并进行安装,注意为了确保代码稳定可控,依赖需要使用精确的版本(即使用1.0.0不要使用^1.0.0这种范围性的),或者直接使用npm install {name} -E 来安装并自动添加精确版本依赖。
2、代码中使用 跟常规npm使用一样,直接 import {xx} from '@wecteam/xx' 即可。

dm-cli编译npm流程

1、检查npm包 检查 package.json 中指定的版本号与当前 node_modules 中安装的包版本是否匹配,若不匹配,则会自动安装。若提前安装好了,此步骤将跳过。
2、npm包适配 对部分三端同构的基础库进行小程序端适配。
3、构建npm 调用微信开发者工具CLI执行构建npm,将当前项目依赖的npm包转成 miniprogram_npm 目录。若已经构建过了,此步骤将跳过。

若构建npm步骤报错,请确保你当前的配置是否有指定正确的微信cli路径,详见本文档wxcli参数说明,建议使用 dm config 进行配置。

4、低版本兼容 由于 npm 支持需要基础库版本 2.2.1 或以上,为了兼容低版本,编译后会将源码中 npm 引入(import {xx} from '@wecteam/xx') 修改成相对路径引入(import {xx} from '../../miniprogram_npm/@wecteam/xx')。
5、智能分包 根据依赖分析动态拷贝 miniprogram_npm 文件到对应目录,比如一个 npm 包仅被一个子包引用,则会在子包目录生成一个 miniprogram_npm 目录。智能分包的过程中会自动修改miniprogram_npm/@wecteam/xx 的相对关系。

配置文件

配置文件支持公有配置dm.config.js和私有配置dm.config.profile.js,私有配置文件优先级大于共有配置,放在在小程序根目录即可,目前可配置的选项如下:

module.exports = {
  // 微信开发者工具CLI安装路径,macOS默认值:/Applications/wechatwebdevtools.app/Contents/MacOS/cli,win无默认值。建议使用dm config配置。
  wxcli: 'D:\\Program Files (x86)\\Tencent\\微信web开发者工具\\cli.bat',
  output: {
    build: path.resolve('../dm-build'), // dm build 命令的文件生成目录,默认为 ../dm-build
    audit: path.resolve('../dm-audit') // dm audit 命令的文件生成目录,默认为 ../dm-aduit
  },
  // 单页抽取,支持数组和字符串形式。一般写在私有配置中。
  page: ['pages/index/index', 'pages/my/index'], // 或者,page:'pages/index/index,pages/my/index'
  /**
   * 修改编译过程的webpack配置
   * @param chain webpack-chain
   */
  webpack (chain: IWebPackChain): void {},
  /**
   * 添加插件配置
   * (string|[string]|[string, object])[]
   */
  plugins:[]
}

常见问题

win系统[构建npm]步骤报错

小程序 CLI 执行过程中,需要调用微信开发者工具 CLI 接口,因此需要指定其安装路径,macOS 下安装路径比较固定,指定了默认值(详见上述),但 win 下安装路径众多,没有指定默认值,因此 win 下需要使用参数 --wxcli 或者配置文件 dm.config.js 指定微信开发者工具 cli.bat 路径,安装路径参考:命令行

WARNING

命令执行后会生成一份 buid.log 日志文件,里面会有一些日志信息
1:WARNING 一般是 import的内容在对应文件中没有 export
WARNING in ./pages/my_pages/coupon/coupon.js 1:9063-9077 "export 'verifyAuthUser' was not found in 'common.js'
2:ERROR 一般是找不到文件,一般是路径写错了,如多写了一个 ../,在微信开发者中工具中,是兼容这种情况的(不论写多少个../,最终会指向 app 根目录)
ERROR in ./pages/recharge/index.json Module not found: Error: Can't resolve '../../../components/quick-nav/quick-nav'
3:以上两种情况均不影响编译结果,可以借此规范代码。