初识npm库之CAC基础 | 催学社@源码共读

842 阅读1分钟

CAC(npm库之构建CLI)

括号

	1.Command中:<>表示必须的命令参数,[]表示可选参数

	2.Options中: <>表示需要字符串/数字值,[]表示该值也可以是true.

否定选项

  • 要允许值为 的选项false,您需要手动指定一个否定选项:
	//这将让 CAC 将默认值设置config为 true,您可以使用--no-config flag 将其设置为false.
	cli
		.command('build [project]', 'Build a project')
		.option('--no-config', 'Disable config file')
		.option('--config <path>', 'Use a custom config file')

可选参数

  • 命令的最后一个参数可以是可变参数,并且只能是最后一个参数。要使参数可变参数,您必须添加...到参数名称的开头,就像 JavaScript 中的 rest 运算符一样

	//执行 node src/cac.js build a.js b.js c.js d.js

	const cli = require('cac')()

	cli
		.command('build <entry> [...otherFiles]', 'Build your app')
		.option('--foo', 'Foo option')
		.action((entry, otherFiles, options) => {
			console.log(entry) // a.js
			console.log(otherFiles) //b.js c.js d.js
			console.log(options) //{ '--': [] }
		})

	cli.help()
	cli.parse()

默认命令

  • 注册将在没有其他命令匹配时使用的命令。

	const cli = require('cac')()

	cli
		.command('[...files]', 'Build files')
		.option('--minimize', 'Minimize output')
		.action((files, options) => {
			console.log(files)
			console.log(options.minimize)
		})

	cli.parse()

提供一个数组作为选项值

	node cli.js --include project-a
	# The parsed options will be:
	# { include: 'project-a' }

	node cli.js --include project-a --include project-b
	# The parsed options will be:
	# { include: ['project-a', 'project-b'] }

Rollup.config.js文件的作用

  • 作用是rollup打包指定使用配置文件
  • Rollup的配置文件是一个es6模块,对外暴露的是一个对象;在这个对象里可以配置一些需要的选项
	//主要的作用是根据入口来分别对esm和cjs文件处理
  return {
    input: 'src/index.ts',
    output: {
      format: dts || esm ? 'esm' : 'cjs',
      file,
      exports: 'named',
    },
    plugins: [
      nodeResolvePlugin({
        mainFields: dts ? ['types', 'typings'] : ['module', 'main'],
        extensions: dts ? ['.d.ts', '.ts'] : ['.js', '.json', '.mjs'],
        customResolveOptions: {
          moduleDirectories: dts
            ? ['node_modules/@types', 'node_modules']
            : ['node_modules'],
        },
      }),
      !dts && require('@rollup/plugin-commonjs')(), //支持 CommonJS 模块
      !dts &&
        esbuildPlugin({
          target: 'es2017',
        }),
      dts && dtsPlugin(),
    ].filter(Boolean),
  }