WeChat 애플릿 cli 스캐폴딩. 작성자는 일반적으로 조금 바쁩니다. 이 프로젝트에 관심이 있는 학생이 있으면 함께 유지하고 개발할 수 있습니다.
현재 제공되는 것:
참고: 사용자 지정 지침을 릴리스 후크와 함께 사용하여 아래 구성 파일의 환경 변수 변경 , 버전 커밋 제출 등과 같은 더 흥미로운 작업을 수행할 수 있습니다.
유용하다고 생각하시면 별점을 주셨으면 좋겠습니다~ ???
npm을 사용하여 전역적으로 설치
npm install -g xdk-cli
설치가 성공적으로 완료되면 이를 사용하여 현재 버전 번호를 볼 수 있습니다.
xdk-cli -v
현재 제공되는 기능 소개를 보려면 -h를 사용하세요.
xdk-cli -h
# 目录结构
- app(小程序目录)
- pages
- app.js
- app.json
- project.config.json
- template
- page
- page.js
- page.json
- page.wxml
- page.wxss
- component
- component.js
...
- xdk.config.js
- xdk.verison.json
# xdk.config.js 设置
module.exports = {
entry: './app'
}
# 目录结构
- dist
- src(小程序目录)
- pages
- app.js
- app.json
- project.config.json
- template
- page
...
- component
...
- xdk.config.js
- xdk.verison.json
# xdk.config.js 设置
module.exports = {
entry: './src',
output: './dist'
}
xdk.config.js는 프로젝트 디렉터리에 생성되어야 합니다.
module.exports = {
// 小程序路径(可选,默认当前目录)
entry: './src',
// 小程序输出文件(可选,默认等于entry)
// 使用gulp,webpack等打包工具开发会导致开发者编辑文件目录和微信编辑器使用目录不同,需要手动进行指定
output: './dist'
// 模版文件夹目录(可选,默认使用cli默认模版,使用默认模版情况下false即可)
template: './template',
// 发布体验版功能的钩子
publishHook: {
// 发布之前(注:必须返回一个Promise对象)
// 参数answer 为之前回答一系列问题的结果
before(answer) {
this.spawnSync('gulp', [`--env=${answer.isRelease ?'online' : 'stage'}`]);
return Promise.resolve();
},
// 发布之后(注:必须返回一个Promise对象)
after(answer) {
// 是否提交git commit
let {isCommitGitLog} = await inquirerGitCommit.call(this);
// 当为正式版本时进行的操作
if (!!answer.isRelease) {
// 修改本地version code
await rewriteVersionCode.call(this);
// 提交git log
!!isCommitGitLog && await commitGitLog.call(this);
}
return Promise.resolve();
}
},
// 自定义命令
// 自定义指令需要用 run 来执行,例如 xdk-cli run dev
customScripts: [
{
name: 'dev',
desc: '开发模式',
async callback() {
let {env} = await inquirerEnvAsync.call(this);
this.spawn('gulp', [`--env=${env}`, '--watch']);
return Promise.resolve();
}
},
{
name: 'sassDoc',
desc: '生成sass文档',
async callback() {
// 生成文档
await sassdoc([`./src/stylesheets/**/*.scss`, `./src/stylesheets/*.scss`], {
dest: './sassdoc',
verbose: true,
display: {
access: ['public'],
alias: true,
},
autofill: ["requires", "throws", "content"],
});
// 自动打开文件
if (process.platform === 'darwin'){
this.spawnSync('open', [`./sassdoc/index.html`]);
}else {
this.log(`目前自动打开浏览器功能只支持darwin内核, 当前内核为: ${process.platform}`);
this.log(`请打开当前路径下html,路径:./sassdoc/index.html`);
}
return Promise.resolve();
}
}
],
};
// 询问是否提交git记录
function inquirerGitCommit() {
return this.inquirer.prompt([
{
type: 'confirm',
name: 'isCommitGitLog',
message: '是否提交git log ?'
}
])
}
// 提交git commit 到log
function commitGitLog() {
return new Promise((resolve, reject) => {
this.spawnSync('git', ['add', '.']);
this.spawnSync('git', ['commit', '-m', `docs: 更改版本号为${versionConf.version}`]);
resolve();
});
}
하도급 및 페이지를 자동으로 식별하여 app.json, ${page}.json에 추가하는 기능을 제공합니다.
# 输入创建命令
xdk-cli create
# 选择创建模式
? 选择你想生成的模版类型:(Use arrow keys)
❯ page
component
# 输入页面名称
? 设置 page 的名字 (例如: index):
# 选择所属分包(none为主包)
? 设置页面所属的分包 (Use arrow keys or type to search)
# 创建成功
>> createPage success
# 输入组件名称
? 设置 component 的名字 (例如: swiper-card):
# 选择组件所属范围
? 设置组件所属的作用域 (Use arrow keys)
❯ global
module
page
# 选择所属页面/分包/全局范围
?设置组件所属的页面
❯ index
logs
user
# 创建成功
>> createComponent success
각 프로젝트에는 서로 다른 템플릿이 필요할 수 있습니다. xdk-cli는 사용해야 하는 템플릿을 쉽게 사용자 정의할 수 있는 폴더 슬롯을 제공합니다.
// 在xcli.config.js 中配置模版目录
module . exports = {
// 模版文件夹
template : './template'
} ;
미니 프로그램의 디렉토리 구조에 대한 자세한 내용은 위의 [ 프로젝트 디렉토리 구조 ]를 참조하세요.
현재는 Mac 버전만 지원됩니다. 작성자는 Windows 개발 환경이 부족합니다(상대적으로 게으름). 더 추가해 주셔서 감사합니다.
{
"version" : " 0.1.9 " ,
"versionDesc" : "版本描述"
}
xdk-cli publish
명령줄을 입력하세요. # 正式版本会修改本地的xdk.config.json文件, 非正式版本不会,且体验版版本号默认为0.0.0
? 是否为正式发布版本? Yes
# 设置版本号
? 设置上传的版本号 (当前版本号: 0.1.9.4): raise alter: 0.1.9
# 设置版本描述
? 写一个简单的介绍来描述这个版本的改动过: 提交了一个正式版
Initializing...
idePortFile: /Users/xuan/Library/Application Support/微信开发者工具/Default/.ide
IDE server has started, listening on http://127.0.0.1:27563
initialization finished
uploading project...
upload success
>> 上传体验版成功, 登录微信公众平台 https://mp.weixin.qq.com 获取体验版二维码
실패하면
xdk.config.js
설정하기 publishHook : {
// 发布之前(注:必须返回一个Promise对象)
before ( answer ) {
console . log ( '要开始发布了' ) ;
return Promise . resolve ( ) ;
} ,
// 发布之后(注:必须返回一个Promise对象)
after ( answer ) {
console . log ( '发布结束了' ) ;
return Promise . resolve ( ) ;
}
} ,
모든 함수 본문 내부의 this 지점은 cli 내부의 일부 기본 메서드를 상속합니다.
// this.spawn
// @param - String 命令行
// @param - Args 参数
// @param - Any 默认'ingerit' ['inherit' | null ]
publishHook: {
before ( answer ) {
this . spawn ( 'gulp' , [ `--env= ${ env } ` , '--watch' ] ) ;
return Promise . resolve ( ) ;
} ,
}
// this.spawnSync
// @param - String 命令行
// @param - Args 参数
// @param - Any 默认'ingerit' ['inherit' | null ]
publishHook: {
before ( answer ) {
this . spawnSync ( 'git' , [ 'add' , '.' ] ) ;
this . spawnSync ( 'git' , [ 'commit' , '-m' , `docs: 更改版本号为${ versionConf . version } ` ] ) ;
return Promise . resolve ( ) ;
} ,
}
// this.log
// @param - String 文本内容
// @param - String 类型 success | error
publishHook: {
after ( answer ) {
this . log ( '成功了~' ) ;
this . log ( '成功了~' , 'error' ) ;
return Promise . resolve ( ) ;
} ,
}
자세한 내용은 https://github.com/SBoudrias/Inquirer.js를 참조하세요.
publishHook: {
async after ( answer ) {
// 是否提交git commit
let { isCommitGitLog } = await inquirerGitCommit . call ( this ) ;
return Promise . resolve ( ) ;
}
}
function inquirerEnvAsync ( ) {
return this . inquirer . prompt ( [
{
type : 'list' ,
name : 'env' ,
message : '选择当前所使用的环境:' ,
choices : [
'online' ,
'stage' ,
] ,
}
] ) ;
}
좋은 의견이나 제안사항이 있으시면 아래 QR코드를 스캔하여 소통해주세요.