Skip to content
Snippets Groups Projects
Verified Commit ccecc09f authored by Georg Krause's avatar Georg Krause
Browse files

Switch to vite + ts components

parent ff8ad9a8
No related branches found
No related tags found
No related merge requests found
module.exports = {
presets: ["@vue/cli-plugin-babel/preset"],
};
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
{ {
"name": "@funkwhale/vui", "name": "vui2",
"version": "0.1.0", "version": "0.0.0",
"main": "dist/vui.umd.min.js",
"files": [
"dist/*",
"src/*"
],
"scripts": { "scripts": {
"build": "vue-cli-service build --target lib --name vui src/main.js", "dev": "vite",
"test:unit": "vue-cli-service test:unit", "build": "vue-tsc --noEmit && vite build",
"lint": "vue-cli-service lint" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
"core-js": "^3.6.5", "@funkwhale/ui": "/home/georg/workspace/funkwhale/ui",
"vue": "^3.0.0" "vue": "^3.2.25"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0", "@vitejs/plugin-vue": "^2.0.0",
"@vue/cli-plugin-eslint": "~4.5.0", "sass": "^1.49.7",
"@vue/cli-plugin-unit-mocha": "~4.5.0", "typescript": "^4.4.4",
"@vue/cli-service": "~4.5.0", "vite": "^2.7.2",
"@vue/compiler-sfc": "^3.0.0", "vue-tsc": "^0.29.8"
"@vue/eslint-config-prettier": "^6.0.0",
"@vue/test-utils": "^2.0.0-0",
"babel-eslint": "^10.1.0",
"chai": "^4.1.2",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^7.0.0",
"prettier": "^2.2.1"
} }
} }
<script setup lang="ts">
// This starter template is using Vue 3 <script setup> SFCs
// Check out https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup
import FunkwhaleButton from './components/FunkwhaleButton.vue'
</script>
<template>
<FunkwhaleButton text="Button" />
</template>
<style></style>
src/assets/logo.png

6.69 KiB

<template>
<div>
<button>Button</button>
</div>
</template>
<script>
export default {
name: "Button",
};
</script>
<style></style>
import Button from "./Button.vue";
export default Button;
<script setup lang="ts">
import { ref } from 'vue'
defineProps<{ text: string }>()
const count = ref(0)
</script>
<template>
<button class="fw button is-primary">{{ text }}</button>
</template>
<style lang="scss">
@import '@funkwhale/ui/src/elements/buttons.scss';
</style>
export { default as Button } from "./Button";
/// <reference types="vite/client" />
declare module '*.vue' {
import { DefineComponent } from 'vue'
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
const component: DefineComponent<{}, {}, any>
export default component
}
import * as components from "./components";
const ComponentLibrary = {
install(Vue) {
for (const componentName in components) {
const component = components[componentName];
Vue.component(component.name, component);
}
},
};
export default ComponentLibrary;
if (typeof window !== "undefined" && window.Vue) {
window.Vue.use(ComponentLibrary);
}
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')
import { expect } from "chai";
import { shallowMount } from "@vue/test-utils";
import Button from "@/components/Button/Button.vue";
describe("Button.vue", () => {
it("renders", () => {
const wrapper = shallowMount(Button);
expect(wrapper.text()).to.equal("Button");
});
});
{
"compilerOptions": {
"target": "esnext",
"useDefineForClassFields": true,
"module": "esnext",
"moduleResolution": "node",
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"lib": ["esnext", "dom"]
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()]
})
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment