0.0.3
commit
bda7dc06a0
|
@ -0,0 +1,14 @@
|
||||||
|
.vscode
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
*.sublime-project
|
||||||
|
*.sublime-workspace
|
||||||
|
package-lock.json
|
||||||
|
|
||||||
|
._*
|
||||||
|
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
|
@ -0,0 +1,69 @@
|
||||||
|
#!/bin/env node
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author yutent<yutent.io@gmail.com>
|
||||||
|
* @date 2022/10/10 15:17:36
|
||||||
|
*/
|
||||||
|
|
||||||
|
import fs from 'iofs'
|
||||||
|
import { resolve, join } from 'path'
|
||||||
|
import { writePackageJson, writeConfigFile, writeGitIgnore } from './lib/demo-config.js'
|
||||||
|
import { writeHtmlFile } from './lib/demo-html.js'
|
||||||
|
import { writeLogo } from './lib/logo.js'
|
||||||
|
import {
|
||||||
|
writeMainJs,
|
||||||
|
writeAppVue,
|
||||||
|
writeHomeVue,
|
||||||
|
writeAboutVue,
|
||||||
|
writeHelloVue,
|
||||||
|
writeRouter,
|
||||||
|
writeStore
|
||||||
|
} from './lib/demo-js.js'
|
||||||
|
|
||||||
|
let args = process.argv.slice(2)
|
||||||
|
|
||||||
|
function printHelp() {
|
||||||
|
console.log('Usage: vue-live-cli {command} [arguments]')
|
||||||
|
console.log(' ', 'vue-live-cli init', '初始化一个符合vue-live的vue项目')
|
||||||
|
console.log(' ', 'vue-live-cli -h[--help]', '打印帮助信息')
|
||||||
|
console.log()
|
||||||
|
process.exit()
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (args[0]) {
|
||||||
|
case 'init':
|
||||||
|
let dir = resolve('./')
|
||||||
|
let isEmpty = fs.ls(dir).length === 0
|
||||||
|
console.log(isEmpty)
|
||||||
|
if (isEmpty) {
|
||||||
|
fs.mkdir(join(dir, 'src'))
|
||||||
|
|
||||||
|
writePackageJson(join(dir, 'package.json'))
|
||||||
|
writeConfigFile(join(dir, 'vue.live.js'))
|
||||||
|
writeGitIgnore(join(dir, '.gitignore'))
|
||||||
|
|
||||||
|
writeHtmlFile(join(dir, 'index.html'))
|
||||||
|
|
||||||
|
writeLogo(join(dir, 'src/assets/logo.svg'))
|
||||||
|
|
||||||
|
writeMainJs(join(dir, 'src/main.js'))
|
||||||
|
writeAppVue(join(dir, 'src/app.vue'))
|
||||||
|
writeHomeVue(join(dir, 'src/views/home.vue'))
|
||||||
|
writeAboutVue(join(dir, 'src/views/about.vue'))
|
||||||
|
writeHelloVue(join(dir, 'src/components/hello.vue'))
|
||||||
|
writeRouter(join(dir, 'src/router.js'))
|
||||||
|
writeStore(join(dir, 'src/store.js'))
|
||||||
|
|
||||||
|
console.log('初始化完成, 依次执行以下命令启动项目: ')
|
||||||
|
console.log('npm i')
|
||||||
|
console.log('npm start')
|
||||||
|
} else {
|
||||||
|
console.error('当前目录非空, 请切换到一个空目录再执行~~')
|
||||||
|
process.exit()
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
printHelp()
|
||||||
|
break
|
||||||
|
}
|
|
@ -0,0 +1,81 @@
|
||||||
|
/**
|
||||||
|
* {}
|
||||||
|
* @author yutent<yutent.io@gmail.com>
|
||||||
|
* @date 2022/10/10 16:49:07
|
||||||
|
*/
|
||||||
|
|
||||||
|
import fs from 'iofs'
|
||||||
|
|
||||||
|
export function writePackageJson(file) {
|
||||||
|
fs.echo(
|
||||||
|
JSON.stringify({
|
||||||
|
name: 'vue-live-demo-app',
|
||||||
|
type: 'module',
|
||||||
|
scripts: {
|
||||||
|
start: 'vue-live dev',
|
||||||
|
build: 'vue-live build'
|
||||||
|
},
|
||||||
|
dependencies: {
|
||||||
|
'@bytedo/vue-live': '^0.0.3'
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function writeConfigFile(file) {
|
||||||
|
fs.echo(
|
||||||
|
`
|
||||||
|
import { resolve } from 'path'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
port: 8080,
|
||||||
|
pages: {
|
||||||
|
// 如果多页应用, 则这里写传入多个值即可(注意不是数组格式)
|
||||||
|
// 这里的key值, 将是最终的页面的名称
|
||||||
|
index: {
|
||||||
|
// 这里的resolve可将相对路径转为绝对路径
|
||||||
|
// 如果传入的路径已经是绝对路径的, 可不需要resolve
|
||||||
|
entry: resolve('./src/main.js'),
|
||||||
|
title: 'vue-live 应用示例'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 以下cdn地址, 可自行修改为适合的
|
||||||
|
// 有用到其他的库, 可以手动添加,
|
||||||
|
// 也可以在页面中直接引入完整的路径, 而不必须在这里声明
|
||||||
|
imports: {
|
||||||
|
vue: '//unpkg.com/vue@3.2.40/dist/vue.esm-browser.prod.js',
|
||||||
|
'vue-router': '//unpkg.com/vue-router@4.1.5/dist/vue-router.esm-browser.js',
|
||||||
|
// 这个库被vue-router依赖, 可以注释掉vue-router代码中的 @vue/devtools-api 的引入
|
||||||
|
// 以达到减少不必须的体积的效果
|
||||||
|
'@vue/devtools-api': '//unpkg.com/@vue/devtools-api@6.4.4/lib/esm/index.js',
|
||||||
|
fetch: '//unpkg.com/@bytedo/fetch@2.0.2/dist/next.js'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
`,
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function writeGitIgnore(file) {
|
||||||
|
fs.echo(
|
||||||
|
`
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
*.sublime-project
|
||||||
|
*.sublime-workspace
|
||||||
|
package-lock.json
|
||||||
|
|
||||||
|
._*
|
||||||
|
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
`,
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
/**
|
||||||
|
* {}
|
||||||
|
* @author yutent<yutent.io@gmail.com>
|
||||||
|
* @date 2022/10/10 17:00:29
|
||||||
|
*/
|
||||||
|
|
||||||
|
import fs from 'iofs'
|
||||||
|
|
||||||
|
export function writeHtmlFile(file) {
|
||||||
|
fs.echo(
|
||||||
|
`<!doctype html>
|
||||||
|
<html lang="zh-CN">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
|
||||||
|
<title>{{title}}</title>
|
||||||
|
<meta name="keywords" content="{{keywords}}">
|
||||||
|
<meta name="description" content="{{description}}">
|
||||||
|
<link rel="stylesheet" href="//unpkg.com/@bytedo/wcui@1.0.6/dist/css/reset-basic.css">
|
||||||
|
<script async src="//esm.tool/es-module-shims.wasm.js"></script>
|
||||||
|
<script type="importmap">{{importmap}}</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="app noselect"></div>
|
||||||
|
<script src="main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`,
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,239 @@
|
||||||
|
/**
|
||||||
|
* {}
|
||||||
|
* @author yutent<yutent.io@gmail.com>
|
||||||
|
* @date 2022/10/10 17:00:29
|
||||||
|
*/
|
||||||
|
|
||||||
|
import fs from 'iofs'
|
||||||
|
|
||||||
|
export function writeMainJs(file) {
|
||||||
|
fs.echo(
|
||||||
|
`
|
||||||
|
import { createApp } from 'vue'
|
||||||
|
import App from './app.vue'
|
||||||
|
|
||||||
|
import router from './router'
|
||||||
|
import store from './store'
|
||||||
|
|
||||||
|
const app = createApp(App)
|
||||||
|
|
||||||
|
app.use(router).use(store).mount('.app')
|
||||||
|
|
||||||
|
`,
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function writeRouter(file) {
|
||||||
|
fs.echo(
|
||||||
|
`
|
||||||
|
import { createRouter, createWebHistory } from 'vue-router'
|
||||||
|
import Home from './views/home.vue'
|
||||||
|
|
||||||
|
const router = createRouter({
|
||||||
|
history: createWebHistory(),
|
||||||
|
routes: [
|
||||||
|
{
|
||||||
|
path: '/',
|
||||||
|
name: 'home',
|
||||||
|
component: Home
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/about',
|
||||||
|
name: 'about',
|
||||||
|
component: () => import('./views/about.vue')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
export default router
|
||||||
|
|
||||||
|
|
||||||
|
`,
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function writeStore(file) {
|
||||||
|
fs.echo(
|
||||||
|
`
|
||||||
|
import { reactive } from 'vue'
|
||||||
|
|
||||||
|
const store = reactive({
|
||||||
|
foo: 'bar',
|
||||||
|
version: '0.0.2'
|
||||||
|
})
|
||||||
|
|
||||||
|
export default function (app) {
|
||||||
|
app.config.globalProperties.$store = store
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function writeAppVue(file) {
|
||||||
|
fs.echo(
|
||||||
|
`
|
||||||
|
<template>
|
||||||
|
<header>
|
||||||
|
<img alt="Vue logo" class="logo" src="/assets/logo.svg" width="125" height="125" />
|
||||||
|
|
||||||
|
<div class="wrapper">
|
||||||
|
<Hello msg="It works!!!" />
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<router-link to="/">Home</router-link>
|
||||||
|
<router-link to="/about">About</router-link>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<router-view />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Hello from './components/hello.vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: { Hello }
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.app {
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--color-teal-1);
|
||||||
|
transition: 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: var(--color-teal-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
margin-top: 32px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
a {
|
||||||
|
margin: 0 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
margin: 32px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
`,
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function writeHelloVue(file) {
|
||||||
|
fs.echo(
|
||||||
|
`
|
||||||
|
<template>
|
||||||
|
<div class="greetings">
|
||||||
|
<h1 class="green">{{ msg }}</h1>
|
||||||
|
<h3>
|
||||||
|
你已经成功运行了一个项目, 项目基于
|
||||||
|
<a href="//github.com/bytedo/vue-live" target="_blank">Vue-live</a> +
|
||||||
|
<a href="//vuejs.org" target="_blank">Vue 3</a>.
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
msg: String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
h1 {
|
||||||
|
font-size: 52px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.green {
|
||||||
|
font-family: 'Courier New', Courier, monospace;
|
||||||
|
color: var(--color-blue-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.greetings {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
`,
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function writeHomeVue(file) {
|
||||||
|
fs.echo(
|
||||||
|
`
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
content: '欢迎访问~~ 这是首页'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<main>
|
||||||
|
<h1>{{content}}</h1>
|
||||||
|
</main>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
`,
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function writeAboutVue(file) {
|
||||||
|
fs.echo(
|
||||||
|
`
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
content: '这是关于我们页面'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<main>
|
||||||
|
<h1>{{content}}</h1>
|
||||||
|
<cite>当前vue-live版本: v{{$store.version}}</cite>
|
||||||
|
</main>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
`,
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
import fs from 'iofs'
|
||||||
|
|
||||||
|
export function writeLogo(file) {
|
||||||
|
fs.echo(
|
||||||
|
'<svg viewBox="0 0 261.76 226.69" xmlns="http://www.w3.org/2000/svg"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/><path d="M36.21 192.639l160.921-74.805-81.778-5.063 119.519-67.69L49.06 126.138l88.8 2.712z" fill="rgb(252, 118, 97)"/></svg>',
|
||||||
|
file
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"name": "@bytedo/vue-live-cli",
|
||||||
|
"type": "module",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"bin": {
|
||||||
|
"vue-live-cli": "index.js"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"iofs": "^1.5.2"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue