Compare commits

...

7 Commits
main ... plus

  1. 3
      .gitignore
  2. 89
      .vscode/settings.json
  3. 14
      dev.ts
  4. 11
      docs/.vuepress/config.ts
  5. 8
      docs/.vuepress/enhanceApp.js
  6. 29
      docs/README.md
  7. 29
      docs/guide/README.md
  8. 1
      docs/guide/vue/README.md
  9. 1
      docs/guide/vue/test01.md
  10. 23
      eslint.config.ts
  11. 14
      index.html
  12. 6
      lefthook.yml
  13. 52
      package.json
  14. 24
      playground/dev.ts
  15. 24
      playground/index.html
  16. 16
      playground/layout.vue
  17. 5
      playground/src/App.vue
  18. 16382
      pnpm-lock.yaml
  19. 4
      readme.md
  20. 16
      scripts/publish-branch.js
  21. 14
      somebuild.config.mts
  22. 21
      src/components/FakeButton/FakeButton.vue
  23. 6
      src/components/FakeButton/index.ts
  24. 22
      src/components/VaguerButton/VaguerButton.vue
  25. 6
      src/components/VaguerButton/index.ts
  26. 4
      src/components/index.ts
  27. 17
      src/index.ts
  28. 9
      src/shims-vue.d.ts
  29. 14
      tsconfig.json

3
.gitignore

@ -1,2 +1,3 @@
node_modules node_modules
dist dist
docs/.vitepress/cache

89
.vscode/settings.json

@ -0,0 +1,89 @@
{
// Disable the default formatter, use eslint instead
"prettier.enable": false,
"editor.formatOnSave": false,
"eslint.format.enable": true,
// Auto fix
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "never"
},
// Silent the stylistic rules in you IDE, but still auto fix them
"eslint.rules.customizations": [
{
"rule": "style/*",
"severity": "off",
"fixable": true
},
{
"rule": "format/*",
"severity": "off",
"fixable": true
},
{
"rule": "*-indent",
"severity": "off",
"fixable": true
},
{
"rule": "*-spacing",
"severity": "off",
"fixable": true
},
{
"rule": "*-spaces",
"severity": "off",
"fixable": true
},
{
"rule": "*-order",
"severity": "off",
"fixable": true
},
{
"rule": "*-dangle",
"severity": "off",
"fixable": true
},
{
"rule": "*-newline",
"severity": "off",
"fixable": true
},
{
"rule": "*quotes",
"severity": "off",
"fixable": true
},
{
"rule": "*semi",
"severity": "off",
"fixable": true
}
],
// Enable eslint for all supported languages
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue",
"html",
"markdown",
"json",
"json5",
"jsonc",
"yaml",
"toml",
"xml",
"gql",
"graphql",
"astro",
"svelte",
"css",
"less",
"scss",
"pcss",
"postcss"
]
}

14
dev.ts

@ -1,14 +0,0 @@
import Vue from "vue";
import { VaguerComponents } from "./src";
import "./dist/style.css"
Vue.use(VaguerComponents);
const app = new Vue({
methods: {
handleClick() {
alert("222");
},
},
});
app.$mount("#app");

11
docs/.vuepress/config.ts

@ -0,0 +1,11 @@
export default {
base: "",
title: 'fake-art',
plugins: ['demo-container'],
themeConfig: {
nav: [
{ text: 'Home', link: '/' }
],
sidebar: {}
}
}

8
docs/.vuepress/enhanceApp.js

@ -0,0 +1,8 @@
import { FakeComponents } from "fake-art"
import "fake-art/dist/style.css"
export default ({
Vue,
}) => {
Vue.use(FakeComponents)
}

29
docs/README.md

@ -0,0 +1,29 @@
# Hello fake-art
Vue2组件展示
::: demo 此处放置代码示例的描述信息,支持 `Markdown` 语法,**描述信息只支持单行**
```html
<template>
<div class="red-center-text">
<FakeButton>{{ message }}</FakeButton>
<input v-model="message" placeholder="Input something..."/>
</div>
</template>
<script>
export default {
data() {
return {
message: 'Hello Vue'
}
}
}
</script>
<style>
.red-center-text {
color: #ff7875;
text-align: center;
}
</style>
```
:::

29
docs/guide/README.md

@ -0,0 +1,29 @@
# Hello VuePressasd
组件展示
::: demo 此处放置代码示例的描述信息,支持 `Markdown` 语法,**描述信息只支持单行**
```html
<template>
<div class="red-center-text">
<FakeButton>{{ message }}</FakeButton>
<input v-model="message" placeholder="Input something..."/>
</div>
</template>
<script>
export default {
data() {
return {
message: 'Hello Vue'
}
}
}
</script>
<style>
.red-center-text {
color: #ff7875;
text-align: center;
}
</style>
```
:::

1
docs/guide/vue/README.md

@ -0,0 +1 @@
fuck

1
docs/guide/vue/test01.md

@ -0,0 +1 @@
# sda

23
eslint.config.ts

@ -0,0 +1,23 @@
import antfu from "@antfu/eslint-config"
export default antfu({
ignores: [
"dist",
"docs",
],
typescript: true,
formatters: true,
yaml: false,
type: "lib",
stylistic: {
indent: 4,
quotes: "double",
},
vue: {
sfcBlocks: true,
vueVersion: 2,
},
rules: {
"node/prefer-global/process": "off",
},
})

14
index.html

@ -1,14 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div id="app">
<vaguer-button @click.native="handleClick">aa</vaguer-button>
</div>
<script type="module" src="/dev.ts"></script>
</body>
</html>

6
lefthook.yml

@ -0,0 +1,6 @@
pre-push:
parallel: true
pre-commit:
jobs:
- name: check code
run: npx eslint .

52
package.json

@ -1,27 +1,40 @@
{ {
"name": "vaguer", "name": "fake-art",
"type": "module", "type": "module",
"main": "./dist/vaguer.js", "version": "0.0.1-alpha.1",
"module": "./dist/vaguer.js",
"typings": "./dist/index.d.ts",
"scripts": {
"watch": "somebuild build --watch",
"dev": "somebuild dev",
"build": "somebuild build"
},
"exports": { "exports": {
".": { ".": {
"import": "./dist/vaguer.js", "types": "./dist/index.d.ts",
"require": "./dist/vaguer.cjs" "import": "./dist/fake-art.js",
"require": "./dist/fake-art.cjs"
}, },
"./style.css": { "./dist/style.css": {
"import": "./dist/style.css", "import": "./dist/style.css",
"require": "./dist/style.css" "require": "./dist/style.css"
} }
}, },
"main": "./dist/fake-art.js",
"module": "./dist/fake-art.js",
"typings": "./dist/index.d.ts",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
},
"files": [ "files": [
"dist" "dist"
], ],
"scripts": {
"postinstall": "lefthook install",
"watch": "somebuild build --watch",
"dev": "somebuild dev",
"build": "somebuild build",
"eslint": "eslint .",
"format": "eslint --fix .",
"publish": "pnpm build && npm publish",
"docs:dev": "vuepress dev docs",
"docs:build": "vuepress build docs",
"docs:publish": "pnpm docs:build && node scripts/publish-branch.js"
},
"globals": { "globals": {
"vue": "Vue" "vue": "Vue"
}, },
@ -29,14 +42,23 @@
"vue": "<= 2.6.14" "vue": "<= 2.6.14"
}, },
"devDependencies": { "devDependencies": {
"vue": "2.6.14", "@antfu/eslint-config": "4.13.2",
"vue-template-compiler": "2.6.14",
"@somebuild/build-component-vue2": "^0.0.6", "@somebuild/build-component-vue2": "^0.0.6",
"@somebuild/vite-config-vue2": "^1.0.1", "@somebuild/vite-config-vue2": "^1.0.1",
"@types/node": "^20.12.10", "@types/node": "^20.12.10",
"eslint": "9.29.0",
"eslint-flat-config-utils": "2.1.0",
"eslint-plugin-format": "1.0.1",
"fake-art": "npm:fake-art@0.0.1-alpha.1",
"gh-pages": "^6.1.1", "gh-pages": "^6.1.1",
"lefthook": "^2.0.4",
"sass": "^1.77.0", "sass": "^1.77.0",
"somebuild": "^0.0.19" "somebuild": "^0.0.19",
"vue": "2.6.14",
"vue-server-renderer": "2.6.14",
"vue-template-compiler": "2.6.14",
"vuepress": "^1.9.10",
"vuepress-plugin-demo-container": "^0.2.0"
}, },
"volta": { "volta": {
"node": "18.17.1", "node": "18.17.1",

24
playground/dev.ts

@ -0,0 +1,24 @@
import type { Component } from "vue"
import Vue from "vue"
import { FakeComponents } from "../src"
import Layout from "./layout.vue"
Vue.use(FakeComponents);
(async () => {
// @ts-expect-error 由于@somebuild/build-component-vue2没有导出vite的类型导致glob无法识别,暂时忽略
const apps = import.meta.glob("./src/**/*.vue")
const name = location.pathname.replace(/^\//, "") || "App"
const file = apps[`./src/${name}.vue`]
if (!file) {
location.pathname = "App"
return
}
const App = ((await file()) as { default: Component }).default
const app = new Vue({
render: h => h(Layout, {}, [h(App)]),
})
app.$mount("#app")
})()

24
playground/index.html

@ -0,0 +1,24 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Playground</title>
<style>
html,
body,
#app {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
</style>
</head>
<body>
<div id="app"></div>
<script type="module" src="/dev.ts"></script>
</body>
</html>

16
playground/layout.vue

@ -0,0 +1,16 @@
<template>
<div class="layout-container">
<slot />
</div>
</template>
<style scoped>
.layout-container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
background-color: #f8f9fa;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
</style>

5
playground/src/App.vue

@ -0,0 +1,5 @@
<template>
<div>
<FakeButton>123</FakeButton>
</div>
</template>

16382
pnpm-lock.yaml

File diff suppressed because it is too large

4
readme.md

@ -1 +1,3 @@
https://github.com/wheatjs/vaguer https://github.com/wheatjs/vaguer
https://v1.vuepress.vuejs.org/zh/
https://docs.chenjianhui.site/vuepress-plugin-demo-container/zh/complex.html#todomvc-%E7%A4%BA%E4%BE%8B

16
scripts/publish-branch.js

@ -1,10 +1,10 @@
import ghpages from "gh-pages"; import ghpages from "gh-pages"
ghpages.publish( ghpages.publish(
".", "docs/\.vuepress/dist",
{ dotfiles: true, branch: "published", src: ["package.json", "dist/**/*"] }, { dotfiles: true, branch: "published" },
function (err) { ).then(() => {
if (err) throw err; console.log("success")
console.log("success"); }).catch((err) => {
} console.error(err)
); })

14
somebuild.config.mts

@ -1,12 +1,12 @@
import { defineRootConfig } from "somebuild"; import fs from "node:fs"
import fs from "node:fs"; import { defineRootConfig } from "somebuild"
const loadJSON = (path) => JSON.parse(fs.readFileSync(new URL(path, import.meta.url), "utf8")); const loadJSON = path => JSON.parse(fs.readFileSync(new URL(path, import.meta.url), "utf8"))
const json = loadJSON("./package.json"); const json = loadJSON("./package.json")
export default defineRootConfig({ export default defineRootConfig({
mode: "component-vue2", "mode": "component-vue2",
"component-vue2": { "component-vue2": {
less27: true, less27: true,
outDir: "./dist", outDir: "./dist",
@ -24,7 +24,9 @@ export default defineRootConfig({
: {}), : {}),
}, },
}, },
...(process.env.DEV ? { root: "./playground" } : {}),
}, },
}, },
}, },
}); })

21
src/components/FakeButton/FakeButton.vue

@ -0,0 +1,21 @@
<script>
export default {
data() {
return {
a: 123,
}
},
}
</script>
<template>
<button class="fake-button">
<slot />
</button>
</template>
<style lang="scss">
.fake-button {
color: red;
}
</style>

6
src/components/FakeButton/index.ts

@ -0,0 +1,6 @@
import FakeButton from "./FakeButton.vue"
export {
FakeButton,
}
export default FakeButton

22
src/components/VaguerButton/VaguerButton.vue

@ -1,22 +0,0 @@
<script>
export default {
data(){
return {
a: 123
}
}
}
</script>
<template>
<button class="vaguer-button">
<slot />-{{ a }}
</button>
</template>
<style lang="scss">
.vaguer-button {
color: red;
}
</style>

6
src/components/VaguerButton/index.ts

@ -1,6 +0,0 @@
import VaguerButton from "./VaguerButton.vue"
export {
VaguerButton
}
export default VaguerButton

4
src/components/index.ts

@ -13,6 +13,6 @@
// }); // });
// export default exportable; // export default exportable;
import VaguerButton from "./VaguerButton/VaguerButton.vue"; import FakeButton from "./FakeButton/FakeButton.vue"
export { VaguerButton }; export { FakeButton }

17
src/index.ts

@ -1,14 +1,15 @@
import type { PluginObject } from "vue"; import type { PluginObject } from "vue"
import * as components from "./components"; import * as components from "./components"
export default components;
export const VaguerComponents: PluginObject<{}> = { export default components
export const FakeComponents: PluginObject<object> = {
install(app) { install(app) {
Object.entries(components).forEach(([key, value]: [string, any]) => { Object.entries(components).forEach(([key, value]: [string, any]) => {
app.component(key, value); app.component(key, value)
}); })
}, },
}; }
export { default as VaguerButton } from "./components/VaguerButton"; export { default as FakeButton } from "./components/FakeButton"

9
src/shims-vue.d.ts

@ -1,5 +1,6 @@
declare module '*.vue' { declare module "*.vue" {
import { DefineComponent } from 'vue' import type { Component } from "vue"
const component: DefineComponent<{}, {}, any>
const component: Component
export default component export default component
} }

14
tsconfig.json

@ -1,13 +1,15 @@
{ {
"compilerOptions": { "compilerOptions": {
"baseUrl": ".",
"module": "ESNext", "module": "ESNext",
"moduleResolution": "Bundler", "moduleResolution": "Bundler",
"resolveJsonModule": true,
"esModuleInterop": true,
"baseUrl": ".",
"paths": { "paths": {
"@/*": ["./src/*"] "fake-art": ["./src/index.ts"],
} "fake-art/*": ["./src/*"]
},
"resolveJsonModule": true,
"esModuleInterop": true
}, },
"exclude": ["node_modules", ".output"] "include": ["src", "playground"],
"exclude": ["node_modules", "dist"]
} }

Loading…
Cancel
Save