Compare commits
1 Commits
linux-dial
...
v2-linux
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
71bfd29376 |
12
.github/FUNDING.yml
vendored
@@ -1,12 +0,0 @@
|
|||||||
# These are supported funding model platforms
|
|
||||||
|
|
||||||
github: [ leaanthony ]
|
|
||||||
patreon: # Replace with a single Patreon username
|
|
||||||
open_collective: # Replace with a single Open Collective username
|
|
||||||
ko_fi: # Replace with a single Ko-fi username
|
|
||||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
|
||||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
|
||||||
liberapay: # Replace with a single Liberapay username
|
|
||||||
issuehunt: # Replace with a single IssueHunt username
|
|
||||||
otechie: # Replace with a single Otechie username
|
|
||||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
|
||||||
10
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -8,12 +8,8 @@ assignees: ''
|
|||||||
---
|
---
|
||||||
|
|
||||||
#####################################################
|
#####################################################
|
||||||
**V1 users: If you have a technical issue, please do not open a bug this way!**
|
If you have a technical issue, please do not open a bug this way!
|
||||||
Please use the `wails issue` command!
|
Please use the `wails issue` command!
|
||||||
If you do not do this then the issue may be closed automatically.
|
|
||||||
|
|
||||||
NOTE: If your bug is related to Windows, make sure you read
|
|
||||||
the [Windows Developer Guide](https://wails.app/guides/windows/)
|
|
||||||
#####################################################
|
#####################################################
|
||||||
|
|
||||||
**Description**
|
**Description**
|
||||||
@@ -33,9 +29,7 @@ A clear and concise description of what you expected to happen.
|
|||||||
If applicable, add screenshots to help explain your problem.
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
**System Details**
|
**System Details**
|
||||||
V2 users: Please add the output of `wails doctor`.
|
Please provide your platform, GO version and variables, etc
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context about the problem here.
|
Add any other context about the problem here.
|
||||||
|
|
||||||
- [ ] This issue is for Windows and I have read the [Windows Developer Guide](https://wails.app/guides/windows/)
|
|
||||||
|
|||||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: enhancement
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
name: Deploy mirror | 部署镜像
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [master]
|
|
||||||
# pull_request:
|
|
||||||
# branches: [ main ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-deploy:
|
|
||||||
name: Automatic deployment | 自动部署
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'misitebao/wails'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout | 切换到部署分支
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
ref: "master"
|
|
||||||
submodules: true
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Build Site | 构建网站
|
|
||||||
run: |
|
|
||||||
cd website &&
|
|
||||||
npm install && npm run build
|
|
||||||
|
|
||||||
- name: Deploy to Server | 部署到服务器
|
|
||||||
uses: hengkx/ssh-deploy@v1.0.1
|
|
||||||
with:
|
|
||||||
HOST: ${{ secrets.DEPLOY_HOST }}
|
|
||||||
USERNAME: ${{ secrets.DEPLOY_HOST_USER }}
|
|
||||||
PASSWORD: ${{ secrets.DEPLOY_HOST_PASSWORD }}
|
|
||||||
SOURCE: "website/build"
|
|
||||||
TARGET: "/www/wwwroot/wails.top"
|
|
||||||
8
.github/workflows/latest-pre.yml
vendored
@@ -1,10 +1,8 @@
|
|||||||
name: latest pre-release
|
name: latest pre-release
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
|
||||||
- develop
|
|
||||||
tags:
|
tags:
|
||||||
- '**-pre**'
|
- '**-pre**'
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
build:
|
build:
|
||||||
@@ -15,10 +13,10 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macOS-latest]
|
os: [ubuntu-latest, windows-latest, macOS-latest]
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Set up Go 1.16
|
- name: Set up Go 1.13
|
||||||
uses: actions/setup-go@v1
|
uses: actions/setup-go@v1
|
||||||
with:
|
with:
|
||||||
go-version: 1.16
|
go-version: 1.13
|
||||||
id: go
|
id: go
|
||||||
|
|
||||||
- name: Check out code into the Go module directory
|
- name: Check out code into the Go module directory
|
||||||
|
|||||||
4
.github/workflows/pr.yml
vendored
@@ -13,10 +13,10 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macOS-latest]
|
os: [ubuntu-latest, windows-latest, macOS-latest]
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Set up Go 1.16
|
- name: Set up Go 1.13
|
||||||
uses: actions/setup-go@v1
|
uses: actions/setup-go@v1
|
||||||
with:
|
with:
|
||||||
go-version: 1.16
|
go-version: 1.13
|
||||||
id: go
|
id: go
|
||||||
|
|
||||||
- name: Check out code into the Go module directory
|
- name: Check out code into the Go module directory
|
||||||
|
|||||||
4
.github/workflows/release.yml
vendored
@@ -15,10 +15,10 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macOS-latest]
|
os: [ubuntu-latest, windows-latest, macOS-latest]
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Set up Go 1.16
|
- name: Set up Go 1.13
|
||||||
uses: actions/setup-go@v1
|
uses: actions/setup-go@v1
|
||||||
with:
|
with:
|
||||||
go-version: 1.16
|
go-version: 1.13
|
||||||
id: go
|
id: go
|
||||||
|
|
||||||
- name: Check out code into the Go module directory
|
- name: Check out code into the Go module directory
|
||||||
|
|||||||
29
.github/workflows/runtime.yml
vendored
@@ -1,29 +0,0 @@
|
|||||||
name: Runtime
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- v2-alpha
|
|
||||||
paths:
|
|
||||||
- 'v2/internal/frontend/runtime/**'
|
|
||||||
jobs:
|
|
||||||
rebuild-runtime:
|
|
||||||
name: Rebuild the runtime
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/setup-node@v2
|
|
||||||
with:
|
|
||||||
node-version: 14.17.6
|
|
||||||
cache: 'npm'
|
|
||||||
cache-dependency-path: v2/internal/frontend/runtime/package-lock.json
|
|
||||||
- run: npm install
|
|
||||||
working-directory: v2/internal/frontend/runtime
|
|
||||||
- run: npm run build
|
|
||||||
working-directory: v2/internal/frontend/runtime
|
|
||||||
|
|
||||||
- name: Commit changes
|
|
||||||
uses: devops-infra/action-commit-push@master
|
|
||||||
with:
|
|
||||||
github_token: "${{ secrets.GITHUB_TOKEN }}"
|
|
||||||
commit_prefix: "[AUTO]"
|
|
||||||
commit_message: "The runtime was rebuilt"
|
|
||||||
9
.gitignore
vendored
@@ -22,12 +22,7 @@ v2/test/**/frontend/dist
|
|||||||
v2/test/**/build/
|
v2/test/**/build/
|
||||||
v2/test/frameless/icon.png
|
v2/test/frameless/icon.png
|
||||||
v2/test/hidden/icon.png
|
v2/test/hidden/icon.png
|
||||||
|
v2/internal/ffenestri/runtime.c
|
||||||
|
v2/internal/runtime/assets/desktop.js
|
||||||
v2/test/kitchensink/frontend/public/bundle.*
|
v2/test/kitchensink/frontend/public/bundle.*
|
||||||
v2/pkg/parser/testproject/frontend/wails
|
v2/pkg/parser/testproject/frontend/wails
|
||||||
v2/test/kitchensink/frontend/public
|
|
||||||
v2/test/kitchensink/build/darwin/desktop/kitchensink
|
|
||||||
v2/test/kitchensink/frontend/package.json.md5
|
|
||||||
/v2/internal/ffenestri/windows/test/cmake-build-debug/
|
|
||||||
!v2/internal/ffenestri/windows/x64/webview2.dll
|
|
||||||
!v2/internal/ffenestri/windows/x64/WebView2Loader.dll
|
|
||||||
.idea/
|
|
||||||
|
|||||||
6
.vscode/settings.json
vendored
@@ -1,8 +1,4 @@
|
|||||||
{
|
{
|
||||||
"go.formatTool": "goimports",
|
"go.formatTool": "goimports",
|
||||||
"eslint.alwaysShowStatus": true,
|
"eslint.alwaysShowStatus": true
|
||||||
"files.associations": {
|
|
||||||
"__locale": "c",
|
|
||||||
"ios": "c"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -31,18 +31,4 @@ Wails is what it is because of the time and effort given by these great people.
|
|||||||
* [Christopher Murphy](https://github.com/Splode)
|
* [Christopher Murphy](https://github.com/Splode)
|
||||||
* [Zámbó, Levente](https://github.com/Lyimmi)
|
* [Zámbó, Levente](https://github.com/Lyimmi)
|
||||||
* [artem](https://github.com/Unix4ever)
|
* [artem](https://github.com/Unix4ever)
|
||||||
* [Tim Kipp](https://github.com/timkippdev)
|
* [Tim Kipp](https://github.com/timkippdev)
|
||||||
* [Dmitry Gomzyakov](https://github.com/kyoto44)
|
|
||||||
* [Arthur Wiebe](https://github.com/artooro)
|
|
||||||
* [Ilgıt Yıldırım](https://github.com/ilgityildirim)
|
|
||||||
* [Altynbek](https://github.com/gelleson)
|
|
||||||
* [Kyle](https://github.com/kmuchmore)
|
|
||||||
* [Balakrishna Prasad Ganne](https://github.com/aayush420)
|
|
||||||
* [Charaf Rezrazi](https://github.com/Rezrazi)
|
|
||||||
* [misitebao](https://github.com/misitebao)
|
|
||||||
* [Elie Grenon](https://github.com/DrunkenPoney)
|
|
||||||
* [SophieAu](https://github.com/SophieAu)
|
|
||||||
* [Alexander Matviychuk](https://github.com/alexmat)
|
|
||||||
* [RH12503](https://github.com/RH12503)
|
|
||||||
* [hi019](https://github.com/hi019)
|
|
||||||
* [Igor Minen](https://github.com/Igogrek)
|
|
||||||
|
|||||||
372
README.md
@@ -1,96 +1,27 @@
|
|||||||
<p align="center" style="text-align: center">
|
<p align="center" style="text-align: center">
|
||||||
<img src="logo.png" width="55%"><br/>
|
<img src="logo_cropped.png" width="40%"><br/>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
Build desktop applications using Go & Web Technologies.<br/><br/>
|
A framework for building desktop applications using Go & Web Technologies.<br/><br/>
|
||||||
<a href="https://github.com/wailsapp/wails/blob/master/LICENSE">
|
<a href="https://github.com/wailsapp/wails/blob/master/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg"></a>
|
||||||
<img src="https://img.shields.io/badge/License-MIT-blue.svg">
|
<a href="https://goreportcard.com/report/github.com/wailsapp/wails"><img src="https://goreportcard.com/badge/github.com/wailsapp/wails"/></a>
|
||||||
</a>
|
<a href="http://godoc.org/github.com/wailsapp/wails"><img src="https://img.shields.io/badge/godoc-reference-blue.svg"/></a>
|
||||||
<a href="https://goreportcard.com/report/github.com/wailsapp/wails">
|
<a href="https://www.codefactor.io/repository/github/wailsapp/wails"><img src="https://www.codefactor.io/repository/github/wailsapp/wails/badge" alt="CodeFactor" /></a>
|
||||||
<img src="https://goreportcard.com/badge/github.com/wailsapp/wails"/>
|
<a href="https://github.com/wailsapp/wails/issues"><img src="https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat" alt="CodeFactor" /></a>
|
||||||
</a>
|
<a href="https://app.fossa.io/projects/git%2Bgithub.com%2Fwailsapp%2Fwails?ref=badge_shield" alt="FOSSA Status"><img src="https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwailsapp%2Fwails.svg?type=shield"/></a>
|
||||||
<a href="http://godoc.org/github.com/wailsapp/wails">
|
<a href="https://houndci.com"><img src="https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg"/></a>
|
||||||
<img src="https://img.shields.io/badge/godoc-reference-blue.svg"/>
|
<a href="https://github.com/avelino/awesome-go" rel="nofollow"><img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome"></a>
|
||||||
</a>
|
<a href="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" rel="nofollow"><img src="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" alt="Release Pipelines"></a>
|
||||||
<a href="https://www.codefactor.io/repository/github/wailsapp/wails">
|
<a href="https://github.com/wailsapp/wails/workflows/latest-pre/badge.svg?branch=masterr" rel="nofollow"><img src="https://github.com/wailsapp/wails/workflows/latest-pre/badge.svg?branch=master" alt="Pre-Release Pipelines"></a>
|
||||||
<img src="https://www.codefactor.io/repository/github/wailsapp/wails/badge" alt="CodeFactor" />
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/wailsapp/wails/issues">
|
|
||||||
<img src="https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat" alt="CodeFactor" />
|
|
||||||
</a>
|
|
||||||
<a href="https://app.fossa.io/projects/git%2Bgithub.com%2Fwailsapp%2Fwails?ref=badge_shield" alt="FOSSA Status">
|
|
||||||
<img src="https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwailsapp%2Fwails.svg?type=shield"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://houndci.com">
|
|
||||||
<img src="https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/avelino/awesome-go" rel="nofollow">
|
|
||||||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" rel="nofollow">
|
|
||||||
<img src="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" alt="Release Pipelines"/>
|
|
||||||
</a>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<span id="nav-1"></span>
|
The traditional method of providing web interfaces to Go programs is via a built-in web server. Wails offers a different approach: it provides the ability to wrap both Go code and a web frontend into a single binary. Tools are provided to make this easy for you by handling project creation, compilation and bundling. All you have to do is get creative!
|
||||||
|
|
||||||
## Internationalization
|
|
||||||
|
|
||||||
[English](README.md) | [简体中文](README.zh-Hans.md)
|
|
||||||
|
|
||||||
<span id="nav-2"></span>
|
|
||||||
|
|
||||||
## Table of Contents
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Click me to Open/Close the directory listing</summary>
|
|
||||||
|
|
||||||
- [1. Internationalization](#nav-1)
|
|
||||||
- [2. Table of Contents](#nav-2)
|
|
||||||
- [3. Introduction](#nav-3)
|
|
||||||
- [3.1 Official Website](#nav-3-1)
|
|
||||||
- [4. Features](#nav-4)
|
|
||||||
- [5. Sponsors](#nav-5)
|
|
||||||
- [6. Installation](#nav-6)
|
|
||||||
- [6.1 MacOS](#nav-6-1)
|
|
||||||
- [6.2 Linux](#nav-6-2)
|
|
||||||
- [6.2.1 Debian/Ubuntu](#nav-6-2-1)
|
|
||||||
- [6.2.2 Arch Linux / ArchLabs / Ctlos Linux](#nav-6-2-2)
|
|
||||||
- [6.2.3 Centos](#nav-6-2-3)
|
|
||||||
- [6.2.4 Fedora](#nav-6-2-4)
|
|
||||||
- [6.2.5 VoidLinux & VoidLinux-musl](#nav-6-2-5)
|
|
||||||
- [6.2.6 Gentoo](#nav-6-2-6)
|
|
||||||
- [6.3 Windows](#nav-6-3)
|
|
||||||
- [7. Usage](#nav-7)
|
|
||||||
- [7.1 Next Steps](#nav-7-1)
|
|
||||||
- [8. FAQ](#nav-8)
|
|
||||||
- [9. Contributors](#nav-9)
|
|
||||||
- [10. Special Mentions](#nav-10)
|
|
||||||
- [12. Special Thanks](#nav-11)
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<span id="nav-3"></span>
|
|
||||||
|
|
||||||
## Introductions
|
|
||||||
|
|
||||||
The traditional method of providing web interfaces to Go programs is via a built-in web server. Wails offers a different
|
|
||||||
approach: it provides the ability to wrap both Go code and a web frontend into a single binary. Tools are provided to
|
|
||||||
make this easy for you by handling project creation, compilation and bundling. All you have to do is get creative!
|
|
||||||
|
|
||||||
<span id="nav-3-1"></span>
|
|
||||||
|
|
||||||
### Official Website
|
|
||||||
|
|
||||||
The official docs can be found at [https://wails.app](https://wails.app).
|
The official docs can be found at [https://wails.app](https://wails.app).
|
||||||
|
|
||||||
Click [here](https://wails.io) if you are interested in trying out v2 Beta for Windows.
|
|
||||||
|
|
||||||
<span id="nav-4"></span>
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Use standard Go for the backend
|
- Use standard Go libraries/frameworks for the backend
|
||||||
- Use any frontend technology to build your UI
|
- Use any frontend technology to build your UI
|
||||||
- Quickly create Vue, Vuetify or React frontends for your Go programs
|
- Quickly create Vue, Vuetify or React frontends for your Go programs
|
||||||
- Expose Go methods/functions to the frontend via a single bind command
|
- Expose Go methods/functions to the frontend via a single bind command
|
||||||
@@ -100,135 +31,22 @@ Click [here](https://wails.io) if you are interested in trying out v2 Beta for W
|
|||||||
- Powerful cli tool
|
- Powerful cli tool
|
||||||
- Multiplatform
|
- Multiplatform
|
||||||
|
|
||||||
<span id="nav-5"></span>
|
|
||||||
|
|
||||||
## Sponsors
|
|
||||||
|
|
||||||
This project is supported by these kind people / companies:
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://www.easywebadv.it/" style="width:150px;">
|
|
||||||
<img src="website/static/img/easyweb.png" width="150"/>
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<a href="https://github.com/sponsors/leaanthony" style="width:100px;">
|
|
||||||
<img src="sponsors/silver%20sponsor.png" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/letheanVPN" style="width:100px;">
|
|
||||||
<img src="https://github.com/letheanVPN.png?size=100" width="100"/>
|
|
||||||
</a>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<a href="https://github.com/sponsors/leaanthony" style="width:100px;">
|
|
||||||
<img src="sponsors/bronze%20sponsor.png" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/snider" style="width:100px;">
|
|
||||||
<img src="https://github.com/snider.png?size=100" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/codydbentley" style="width:100px">
|
|
||||||
<img src="https://github.com/codydbentley.png?size=100" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/CrackDavid" style="width:100px">
|
|
||||||
<img src="https://github.com/CrackDavid.png?size=100" width="100"/>
|
|
||||||
</a>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<a href="https://github.com/matryer" style="width:100px">
|
|
||||||
<img src="https://github.com/matryer.png" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://www.jetbrains.com?from=Wails" style="width:100px">
|
|
||||||
<img src="/assets/images/jetbrains-grayscale.png" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/tc-hib" style="width:55px">
|
|
||||||
<img src="https://github.com/tc-hib.png?size=55" width="55"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/picatz" style="width:50px">
|
|
||||||
<img src="https://github.com/picatz.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/tylertravisty" style="width:50px">
|
|
||||||
<img src="https://github.com/tylertravisty.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/akhudek" style="width:50px">
|
|
||||||
<img src="https://github.com/akhudek.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/trea" style="width:50px">
|
|
||||||
<img src="https://github.com/trea.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/LanguageAgnostic" style="width:55px">
|
|
||||||
<img src="https://github.com/LanguageAgnostic.png?size=55" width="55"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/fcjr" style="width:55px">
|
|
||||||
<img src="https://github.com/fcjr.png?size=55" width="55"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/nickarellano" style="width:60px">
|
|
||||||
<img src="https://github.com/nickarellano.png?size=60" width="60"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/bglw" style="width:65px">
|
|
||||||
<img src="https://github.com/bglw.png?size=65" width="65"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/jugglingjsons" style="width:50px">
|
|
||||||
<img src="https://github.com/jugglingjsons.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/marcus-crane" style="width:65px">
|
|
||||||
<img src="https://github.com/marcus-crane.png?size=65" width="65"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/bbergshaven" style="width:45px">
|
|
||||||
<img src="https://github.com/bbergshaven.png?size=45" width="45"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/Gilgames000" style="width:45px">
|
|
||||||
<img src="https://github.com/Gilgames000.png?size=45" width="45"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/ilgityildirim" style="width:50px">
|
|
||||||
<img src="https://github.com/ilgityildirim.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/questrail" style="width:50px">
|
|
||||||
<img src="https://github.com/questrail.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/DonTomato" style="width:45px">
|
|
||||||
<img src="https://github.com/DonTomato.png?size=45" width="45"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/taigrr" style="width:45px">
|
|
||||||
<img src="https://github.com/taigrr.png?size=45" width="45"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/charlie-dee" style="width:55px">
|
|
||||||
<img src="https://github.com/charlie-dee.png?size=55" width="55"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/EdenNetworkItalia" style="width:65px">
|
|
||||||
<img src="https://github.com/EdenNetworkItalia.png?size=65" width="65"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/michaelolson1996" style="width:55px">
|
|
||||||
<img src="https://github.com/michaelolson1996.png?size=55" width="55"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/GargantuaX" style="width:45px">
|
|
||||||
<img src="https://github.com/GargantuaX.png?size=45" width="45"/>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<span id="nav-6"></span>
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Wails uses cgo to bind to the native rendering engines so a number of platform dependent libraries are needed as well as
|
Wails uses cgo to bind to the native rendering engines so a number of platform dependent libraries are needed as well as an installation of Go. The basic requirements are:
|
||||||
an installation of Go. The basic requirements are:
|
|
||||||
|
|
||||||
- Go 1.16
|
- Go 1.13
|
||||||
- npm
|
- npm
|
||||||
|
|
||||||
<span id="nav-6-1"></span>
|
|
||||||
|
|
||||||
### MacOS
|
### MacOS
|
||||||
|
|
||||||
Make sure you have the xcode command line tools installed. This can be done by running:
|
Make sure you have the xcode command line tools installed. This can be done by running:
|
||||||
|
|
||||||
`xcode-select --install`
|
`xcode-select --install`
|
||||||
|
|
||||||
<span id="nav-6-2"></span>
|
|
||||||
|
|
||||||
### Linux
|
### Linux
|
||||||
|
|
||||||
<span id="nav-6-2-1"></span>
|
|
||||||
|
|
||||||
#### Debian/Ubuntu
|
#### Debian/Ubuntu
|
||||||
|
|
||||||
`sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev`
|
`sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev`
|
||||||
@@ -237,183 +55,103 @@ _Debian: 8, 9, 10_
|
|||||||
|
|
||||||
_Ubuntu: 16.04, 18.04, 19.04_
|
_Ubuntu: 16.04, 18.04, 19.04_
|
||||||
|
|
||||||
_Also succesfully tested on: Zorin 15, Parrot 4.7, Linuxmint 19, Elementary 5, Kali, Neon_, Pop!\_OS
|
_Also succesfully tested on: Zorin 15, Parrot 4.7, Linuxmint 19, Elementary 5, Kali, Neon_, Pop!_OS
|
||||||
|
|
||||||
<span id="nav-6-2-2"></span>
|
#### Arch Linux / ArchLabs
|
||||||
|
|
||||||
#### Arch Linux / ArchLabs / Ctlos Linux
|
|
||||||
|
|
||||||
`sudo pacman -S webkit2gtk gtk3`
|
`sudo pacman -S webkit2gtk gtk3`
|
||||||
|
|
||||||
_Also succesfully test on: Manjaro & ArcoLinux_
|
_Also succesfully test on: Manjaro & ArcoLinux_
|
||||||
|
|
||||||
<span id="nav-6-2-3"></span>
|
|
||||||
|
|
||||||
#### Centos
|
#### Centos
|
||||||
|
|
||||||
`sudo yum install webkitgtk3-devel gtk3-devel`
|
`sudo yum install webkitgtk3-devel gtk3-devel`
|
||||||
|
|
||||||
_CentOS 6, 7_
|
_CentOS 6, 7_
|
||||||
|
|
||||||
<span id="nav-6-2-4"></span>
|
|
||||||
|
|
||||||
#### Fedora
|
#### Fedora
|
||||||
|
|
||||||
`sudo yum install webkit2gtk3-devel gtk3-devel`
|
`sudo yum install webkit2gtk3-devel gtk3-devel`
|
||||||
|
|
||||||
_Fedora 29, 30_
|
_Fedora 29, 30_
|
||||||
|
|
||||||
<span id="nav-6-2-5"></span>
|
|
||||||
|
|
||||||
#### VoidLinux & VoidLinux-musl
|
#### VoidLinux & VoidLinux-musl
|
||||||
|
|
||||||
`xbps-install gtk+3-devel webkit2gtk-devel`
|
`xbps-install gtk+3-devel webkit2gtk-devel`
|
||||||
|
|
||||||
<span id="nav-6-2-6"></span>
|
|
||||||
|
|
||||||
#### Gentoo
|
#### Gentoo
|
||||||
|
|
||||||
`sudo emerge gtk+:3 webkit-gtk`
|
`sudo emerge gtk+:3 webkit-gtk`
|
||||||
|
|
||||||
<span id="nav-6-3"></span>
|
|
||||||
|
|
||||||
### Windows
|
### Windows
|
||||||
|
|
||||||
Windows requires gcc and related tooling. The recommended download is
|
Windows requires gcc and related tooling. The recommended download is from [http://tdm-gcc.tdragon.net/download](http://tdm-gcc.tdragon.net/download). Once this is installed, you are good to go.
|
||||||
from [http://tdm-gcc.tdragon.net/download](http://tdm-gcc.tdragon.net/download). Once this is installed, you are good to
|
|
||||||
go.
|
|
||||||
|
|
||||||
<span id="nav-7"></span>
|
## Installation
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
**Ensure Go modules are enabled: GO111MODULE=on and go/bin is in your PATH variable.**
|
**Ensure Go modules are enabled: GO111MODULE=on and go/bin is in your PATH variable.**
|
||||||
|
|
||||||
Installation is as simple as running the following command:
|
Installation is as simple as running the following command:
|
||||||
|
|
||||||
```
|
<pre style='color:white'>
|
||||||
go get -u github.com/wailsapp/wails/cmd/wails
|
go get -u github.com/wailsapp/wails/cmd/wails
|
||||||
```
|
</pre>
|
||||||
|
|
||||||
<span id="nav-7-1"></span>
|
## Next Steps
|
||||||
|
|
||||||
### Next Steps
|
|
||||||
|
|
||||||
It is recommended at this stage to read the comprehensive documentation at [https://wails.app](https://wails.app).
|
It is recommended at this stage to read the comprehensive documentation at [https://wails.app](https://wails.app).
|
||||||
|
|
||||||
<span id="nav-8"></span>
|
|
||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
|
|
||||||
- Is this an alternative to Electron?
|
* Is this an alternative to Electron?
|
||||||
|
|
||||||
Depends on your requirements. It's designed to make it easy for Go programmers to make lightweight desktop
|
Depends on your requirements. It's designed to make it easy for Go programmers to make lightweight desktop applications or add a frontend to their existing applications. Whilst Wails does not currently offer hooks into native elements such as menus, this may change in the future.
|
||||||
applications or add a frontend to their existing applications. Whilst Wails does not currently offer hooks into native
|
|
||||||
elements such as menus, this may change in the future.
|
|
||||||
|
|
||||||
- Who is this project aimed at?
|
* Who is this project aimed at?
|
||||||
|
|
||||||
Go programmers who want to bundle an HTML/JS/CSS frontend with their applications, without resorting to creating a
|
Go programmers who want to bundle an HTML/JS/CSS frontend with their applications, without resorting to creating a server and opening a browser to view it.
|
||||||
server and opening a browser to view it.
|
|
||||||
|
|
||||||
- What's with the name?
|
* What's with the name?
|
||||||
|
|
||||||
When I saw WebView, I thought "What I really want is tooling around building a WebView app, a bit like Rails is to
|
When I saw WebView, I thought "What I really want is tooling around building a WebView app, a bit like Rails is to Ruby". So initially it was a play on words (Webview on Rails). It just so happened to also be a homophone of the English name for the [Country](https://en.wikipedia.org/wiki/Wales) I am from. So it stuck.
|
||||||
Ruby". So initially it was a play on words (Webview on Rails). It just so happened to also be a homophone of the
|
|
||||||
English name for the [Country](https://en.wikipedia.org/wiki/Wales) I am from. So it stuck.
|
|
||||||
|
|
||||||
<span id="nav-9"></span>
|
## Shoulders of Giants
|
||||||
|
|
||||||
## Contributors
|
|
||||||
|
|
||||||
<a href="https://github.com/qaisjp"><img src="https://github.com/qaisjp.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/alee792"><img src="https://github.com/alee792.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/lanzafame"><img src="https://github.com/lanzafame.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/mattn"><img src="https://github.com/mattn.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/0xflotus"><img src="https://github.com/0xflotus.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/mdhender"><img src="https://github.com/mdhender.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/fishfishfish2104"><img src="https://github.com/fishfishfish2104.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/intelwalk"><img src="https://github.com/intelwalk.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/ocelotsloth"><img src="https://github.com/ocelotsloth.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/bh90210"><img src="https://github.com/bh90210.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/iceleo-com"><img src="https://github.com/iceleo-com.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/fallendusk"><img src="https://github.com/fallendusk.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Chronophylos"><img src="https://github.com/Chronophylos.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Vaelatern"><img src="https://github.com/Vaelatern.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/mewmew"><img src="https://github.com/mewmew.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/kraney"><img src="https://github.com/kraney.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/JackMordaunt"><img src="https://github.com/JackMordaunt.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/MichaelHipp"><img src="https://github.com/MichaelHipp.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/tmclane"><img src="https://github.com/tmclane.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Rested"><img src="https://github.com/Rested.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Jarek-SRT"><img src="https://github.com/Jarek-SRT.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/konez2k"><img src="https://github.com/konez2k.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/sayuthisobri"><img src="https://github.com/sayuthisobri.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/dedo1911"><img src="https://github.com/dedo1911.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/fdidron"><img src="https://github.com/fdidron.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Splode"><img src="https://github.com/Splode.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Lyimmi"><img src="https://github.com/Lyimmi.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Unix4ever"><img src="https://github.com/Unix4ever.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/timkippdev"><img src="https://github.com/timkippdev.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/kyoto44"><img src="https://github.com/kyoto44.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/artooro"><img src="https://github.com/artooro.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/ilgityildirim"><img src="https://github.com/ilgityildirim.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/gelleson"><img src="https://github.com/gelleson.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/kmuchmore"><img src="https://github.com/kmuchmore.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/aayush420"><img src="https://github.com/aayush420.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Rezrazi"><img src="https://github.com/Rezrazi.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/misitebao"><img src="https://github.com/misitebao.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/DrunkenPoney"><img src="https://github.com/DrunkenPoney.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/SophieAu"><img src="https://github.com/SophieAu.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/alexmat"><img src="https://github.com/alexmat.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/RH12503"><img src="https://github.com/RH12503.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/hi019"><img src="https://github.com/hi019.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Igogrek"><img src="https://github.com/Igogrek.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/aschey"><img src="https://github.com/aschey.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/akhudek"><img src="https://github.com/akhudek.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/s12chung"><img src="https://github.com/s12chung.png?size=40" width="40"/></a>
|
|
||||||
|
|
||||||
<span id="nav-10"></span>
|
|
||||||
|
|
||||||
## Special Mentions
|
|
||||||
|
|
||||||
Without the following people, this project would never have existed:
|
Without the following people, this project would never have existed:
|
||||||
|
|
||||||
- [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - His support and feedback has been immense. More patience than
|
* [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - His support and feedback has been immense. More patience than you can throw a stick at (Not long now Dustin!).
|
||||||
you can throw a stick at (Not long now Dustin!).
|
* [Serge Zaitsev](https://github.com/zserge) - Creator of [Webview](https://github.com/zserge/webview) which Wails uses for the windowing.
|
||||||
- [Serge Zaitsev](https://github.com/zserge) - Creator of [Webview](https://github.com/zserge/webview) which Wails uses
|
|
||||||
for the windowing.
|
And without [these people](CONTRIBUTORS.md), it wouldn't be what it is today. A huge thank you to each and every one of you!
|
||||||
- [Byron](https://github.com/bh90210) - At times, Byron has single handedly kept this project alive. Without his
|
|
||||||
incredible input, we never would have got to v1.
|
Special Mentions:
|
||||||
|
|
||||||
|
* [Byron](https://github.com/bh90210) - At times, Byron has single handedly kept this project alive. Without his incredible input, we never would have got to v1.
|
||||||
|
|
||||||
This project was mainly coded to the following albums:
|
This project was mainly coded to the following albums:
|
||||||
|
|
||||||
- [Manic Street Preachers - Resistance Is Futile](https://open.spotify.com/album/1R2rsEUqXjIvAbzM0yHrxA)
|
* [Manic Street Preachers - Resistance Is Futile](https://open.spotify.com/album/1R2rsEUqXjIvAbzM0yHrxA)
|
||||||
- [Manic Street Preachers - This Is My Truth, Tell Me Yours](https://open.spotify.com/album/4VzCL9kjhgGQeKCiojK1YN)
|
* [Manic Street Preachers - This Is My Truth, Tell Me Yours](https://open.spotify.com/album/4VzCL9kjhgGQeKCiojK1YN)
|
||||||
- [The Midnight - Endless Summer](https://open.spotify.com/album/4Krg8zvprquh7TVn9OxZn8)
|
* [The Midnight - Endless Summer](https://open.spotify.com/album/4Krg8zvprquh7TVn9OxZn8)
|
||||||
- [Gary Newman - Savage (Songs from a Broken World)](https://open.spotify.com/album/3kMfsD07Q32HRWKRrpcexr)
|
* [Gary Newman - Savage (Songs from a Broken World)](https://open.spotify.com/album/3kMfsD07Q32HRWKRrpcexr)
|
||||||
- [Steve Vai - Passion & Warfare](https://open.spotify.com/album/0oL0OhrE2rYVns4IGj8h2m)
|
* [Steve Vai - Passion & Warfare](https://open.spotify.com/album/0oL0OhrE2rYVns4IGj8h2m)
|
||||||
- [Ben Howard - Every Kingdom](https://open.spotify.com/album/1nJsbWm3Yy2DW1KIc1OKle)
|
* [Ben Howard - Every Kingdom](https://open.spotify.com/album/1nJsbWm3Yy2DW1KIc1OKle)
|
||||||
- [Ben Howard - Noonday Dream](https://open.spotify.com/album/6astw05cTiXEc2OvyByaPs)
|
* [Ben Howard - Noonday Dream](https://open.spotify.com/album/6astw05cTiXEc2OvyByaPs)
|
||||||
- [Adwaith - Melyn](https://open.spotify.com/album/2vBE40Rp60tl7rNqIZjaXM)
|
* [Adwaith - Melyn](https://open.spotify.com/album/2vBE40Rp60tl7rNqIZjaXM)
|
||||||
- [Gwidaith Hen Fran - Cedors Hen Wrach](https://open.spotify.com/album/3v2hrfNGINPLuDP0YDTOjm)
|
* [Gwidaith Hen Fran - Cedors Hen Wrach](https://open.spotify.com/album/3v2hrfNGINPLuDP0YDTOjm)
|
||||||
- [Metallica - Metallica](https://open.spotify.com/album/2Kh43m04B1UkVcpcRa1Zug)
|
* [Metallica - Metallica](https://open.spotify.com/album/2Kh43m04B1UkVcpcRa1Zug)
|
||||||
- [Bloc Party - Silent Alarm](https://open.spotify.com/album/6SsIdN05HQg2GwYLfXuzLB)
|
* [Bloc Party - Silent Alarm](https://open.spotify.com/album/6SsIdN05HQg2GwYLfXuzLB)
|
||||||
- [Maxthor - Another World](https://open.spotify.com/album/3tklE2Fgw1hCIUstIwPBJF)
|
* [Maxthor - Another World](https://open.spotify.com/album/3tklE2Fgw1hCIUstIwPBJF)
|
||||||
- [Alun Tan Lan - Y Distawrwydd](https://open.spotify.com/album/0c32OywcLpdJCWWMC6vB8v)
|
* [Alun Tan Lan - Y Distawrwydd](https://open.spotify.com/album/0c32OywcLpdJCWWMC6vB8v)
|
||||||
|
|
||||||
<span id="nav-11"></span>
|
## Licensing
|
||||||
|
|
||||||
## Special Thanks
|
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fwailsapp%2Fwails?ref=badge_large)
|
||||||
|
|
||||||
<p align="center" style="text-align: center">
|
## Special Thank You
|
||||||
<a href="https://pace.dev"><img src="/assets/images/pace.jpeg"/></a><br/>
|
|
||||||
A <i>huge</i> thanks to <a href="https://pace.dev">Pace</a> for sponsoring the project and helping the efforts to get Wails ported to Apple Silicon!<br/><br/>
|
|
||||||
If you are looking for a Project Management tool that's powerful but quick and easy to use, check them out!<br/><br/>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align="center" style="text-align: center">
|
<p align="center" style="text-align: center">
|
||||||
A special thank you to JetBrains for donating licenses to us!<br/><br/>
|
A special thank you to JetBrains for donating licenses to us!<br/><br/>
|
||||||
Please click the logo to let them know your appreciation!<br/><br/>
|
Please click the logo to let them know your appreciation!<br/><br/>
|
||||||
<a href="https://www.jetbrains.com?from=Wails"><img src="/assets/images/jetbrains-grayscale.png" width="30%"></a>
|
<a href="https://www.jetbrains.com?from=Wails"><img src="jetbrains-grayscale.png" width="30%"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -1,412 +0,0 @@
|
|||||||
<p align="center" style="text-align: center">
|
|
||||||
<img src="logo.png" width="55%"><br/>
|
|
||||||
</p>
|
|
||||||
<p align="center">
|
|
||||||
使用 Go 和 Web 技术构建桌面应用程序。<br/><br/>
|
|
||||||
<a href="https://github.com/wailsapp/wails/blob/master/LICENSE">
|
|
||||||
<img src="https://img.shields.io/badge/License-MIT-blue.svg">
|
|
||||||
</a>
|
|
||||||
<a href="https://goreportcard.com/report/github.com/wailsapp/wails">
|
|
||||||
<img src="https://goreportcard.com/badge/github.com/wailsapp/wails"/>
|
|
||||||
</a>
|
|
||||||
<a href="http://godoc.org/github.com/wailsapp/wails">
|
|
||||||
<img src="https://img.shields.io/badge/godoc-reference-blue.svg"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://www.codefactor.io/repository/github/wailsapp/wails">
|
|
||||||
<img src="https://www.codefactor.io/repository/github/wailsapp/wails/badge" alt="CodeFactor" />
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/wailsapp/wails/issues">
|
|
||||||
<img src="https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat" alt="CodeFactor" />
|
|
||||||
</a>
|
|
||||||
<a href="https://app.fossa.io/projects/git%2Bgithub.com%2Fwailsapp%2Fwails?ref=badge_shield" alt="FOSSA Status">
|
|
||||||
<img src="https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwailsapp%2Fwails.svg?type=shield"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://houndci.com">
|
|
||||||
<img src="https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/avelino/awesome-go" rel="nofollow">
|
|
||||||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" rel="nofollow">
|
|
||||||
<img src="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" alt="Release Pipelines"/>
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<span id="nav-1"></span>
|
|
||||||
|
|
||||||
## 国际化
|
|
||||||
|
|
||||||
[English](README.md) | [简体中文](README.zh-Hans.md)
|
|
||||||
|
|
||||||
<span id="nav-2"></span>
|
|
||||||
|
|
||||||
## 内容目录
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>点我 打开/关闭 目录列表</summary>
|
|
||||||
|
|
||||||
- [1. 国际化](#nav-1)
|
|
||||||
- [2. 内容目录](#nav-2)
|
|
||||||
- [3. 项目介绍](#nav-3)
|
|
||||||
- [3.1 官方网站](#nav-3-1)
|
|
||||||
- [4. 功能](#nav-4)
|
|
||||||
- [5. 赞助商](#nav-5)
|
|
||||||
- [6. 安装](#nav-6)
|
|
||||||
- [6.1 MacOS](#nav-6-1)
|
|
||||||
- [6.2 Linux](#nav-6-2)
|
|
||||||
- [6.2.1 Debian/Ubuntu](#nav-6-2-1)
|
|
||||||
- [6.2.2 Arch Linux / ArchLabs / Ctlos Linux](#nav-6-2-2)
|
|
||||||
- [6.2.3 Centos](#nav-6-2-3)
|
|
||||||
- [6.2.4 Fedora](#nav-6-2-4)
|
|
||||||
- [6.2.5 VoidLinux & VoidLinux-musl](#nav-6-2-5)
|
|
||||||
- [6.2.6 Gentoo](#nav-6-2-6)
|
|
||||||
- [6.3 Windows](#nav-6-3)
|
|
||||||
- [7. 使用方法](#nav-7)
|
|
||||||
- [7.1 下一步](#nav-7-1)
|
|
||||||
- [8. 常见问题](#nav-8)
|
|
||||||
- [9. 贡献者](#nav-9)
|
|
||||||
- [10. 特别提及](#nav-10)
|
|
||||||
- [12. 特别感谢](#nav-11)
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<span id="nav-3"></span>
|
|
||||||
|
|
||||||
## 项目介绍
|
|
||||||
|
|
||||||
为 Go 程序提供 Web 界面的传统方法是通过内置 Web 服务器。Wails 提供了一种不同的方法:它提供了将 Go 代码和 Web
|
|
||||||
前端一起打包成单个二进制文件的能力。通过提供的工具,可以很轻松的完成项目的创建、编译和打包。你所要做的就是发挥想象力!
|
|
||||||
|
|
||||||
<span id="nav-3-1"></span>
|
|
||||||
|
|
||||||
### 官方网站
|
|
||||||
|
|
||||||
官方文档可以在 [https://wails.app](https://wails.app) 中找到。
|
|
||||||
|
|
||||||
如果您对适用于 Windows 的 v2 测试版感兴趣,可以点击[此处](https://wails.io)查看。
|
|
||||||
|
|
||||||
镜像网站:
|
|
||||||
|
|
||||||
- [中国大陆镜像站点 - https://wails.top](https://wails.top)
|
|
||||||
|
|
||||||
<span id="nav-4"></span>
|
|
||||||
|
|
||||||
## 功能
|
|
||||||
|
|
||||||
- 后端使用标准 Go
|
|
||||||
- 使用任意前端技术构建 UI 界面
|
|
||||||
- 快速为您的 Go 应用生成 Vue、Vuetify、React 前端代码
|
|
||||||
- 通过简单的绑定命令将 Go 方法暴露到前端
|
|
||||||
- 使用原生渲染引擎 - 无嵌入式浏览器
|
|
||||||
- 共享事件系统
|
|
||||||
- 原生文件系统对话框
|
|
||||||
- 强大的命令行工具
|
|
||||||
- 跨多个平台
|
|
||||||
|
|
||||||
<span id="nav-5"></span>
|
|
||||||
|
|
||||||
## 赞助商
|
|
||||||
|
|
||||||
这个项目由以下这些人或者公司支持:
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://www.easywebadv.it/" style="width:100px;">
|
|
||||||
<img src="website/static/img/easyweb.png" width="120"/>
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<a href="https://github.com/sponsors/leaanthony" style="width:100px;">
|
|
||||||
<img src="sponsors/silver%20sponsor.png" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/letheanVPN" style="width:100px;">
|
|
||||||
<img src="https://github.com/letheanVPN.png?size=100" width="100"/>
|
|
||||||
</a>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<a href="https://github.com/sponsors/leaanthony" style="width:100px;">
|
|
||||||
<img src="sponsors/bronze%20sponsor.png" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/snider" style="width:100px;">
|
|
||||||
<img src="https://github.com/snider.png?size=100" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/codydbentley" style="width:100px">
|
|
||||||
<img src="https://github.com/codydbentley.png?size=100" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/CrackDavid" style="width:100px">
|
|
||||||
<img src="https://github.com/CrackDavid.png?size=100" width="100"/>
|
|
||||||
</a>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<a href="https://github.com/matryer" style="width:100px">
|
|
||||||
<img src="https://github.com/matryer.png" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://www.jetbrains.com?from=Wails" style="width:100px">
|
|
||||||
<img src="/assets/images/jetbrains-grayscale.png" width="100"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/tc-hib" style="width:55px">
|
|
||||||
<img src="https://github.com/tc-hib.png?size=55" width="55"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/picatz" style="width:50px">
|
|
||||||
<img src="https://github.com/picatz.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/tylertravisty" style="width:50px">
|
|
||||||
<img src="https://github.com/tylertravisty.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/akhudek" style="width:50px">
|
|
||||||
<img src="https://github.com/akhudek.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/trea" style="width:50px">
|
|
||||||
<img src="https://github.com/trea.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/LanguageAgnostic" style="width:55px">
|
|
||||||
<img src="https://github.com/LanguageAgnostic.png?size=55" width="55"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/fcjr" style="width:55px">
|
|
||||||
<img src="https://github.com/fcjr.png?size=55" width="55"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/nickarellano" style="width:60px">
|
|
||||||
<img src="https://github.com/nickarellano.png?size=60" width="60"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/bglw" style="width:65px">
|
|
||||||
<img src="https://github.com/bglw.png?size=65" width="65"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/jugglingjsons" style="width:50px">
|
|
||||||
<img src="https://github.com/jugglingjsons.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/marcus-crane" style="width:65px">
|
|
||||||
<img src="https://github.com/marcus-crane.png?size=65" width="65"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/bbergshaven" style="width:45px">
|
|
||||||
<img src="https://github.com/bbergshaven.png?size=45" width="45"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/Gilgames000" style="width:45px">
|
|
||||||
<img src="https://github.com/Gilgames000.png?size=45" width="45"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/ilgityildirim" style="width:50px">
|
|
||||||
<img src="https://github.com/ilgityildirim.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/questrail" style="width:50px">
|
|
||||||
<img src="https://github.com/questrail.png?size=50" width="50"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/DonTomato" style="width:45px">
|
|
||||||
<img src="https://github.com/DonTomato.png?size=45" width="45"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/taigrr" style="width:45px">
|
|
||||||
<img src="https://github.com/taigrr.png?size=45" width="45"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/charlie-dee" style="width:55px">
|
|
||||||
<img src="https://github.com/charlie-dee.png?size=55" width="55"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/EdenNetworkItalia" style="width:65px">
|
|
||||||
<img src="https://github.com/EdenNetworkItalia.png?size=65" width="65"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/michaelolson1996" style="width:55px">
|
|
||||||
<img src="https://github.com/michaelolson1996.png?size=55" width="55"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/GargantuaX" style="width:45px">
|
|
||||||
<img src="https://github.com/GargantuaX.png?size=45" width="45"/>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<span id="nav-6"></span>
|
|
||||||
|
|
||||||
## 安装
|
|
||||||
|
|
||||||
Wails 使用 cgo 与原生渲染引擎结合,因此需要依赖一些平台的库以及 Go 的安装。基本要求是:
|
|
||||||
|
|
||||||
- Go 1.16
|
|
||||||
- npm
|
|
||||||
|
|
||||||
<span id="nav-6-1"></span>
|
|
||||||
|
|
||||||
### MacOS
|
|
||||||
|
|
||||||
请确保已安装 xcode 命令行工具。这可以通过运行下面的命令来完成:
|
|
||||||
|
|
||||||
`xcode-select --install`
|
|
||||||
|
|
||||||
<span id="nav-6-2"></span>
|
|
||||||
|
|
||||||
### Linux
|
|
||||||
|
|
||||||
<span id="nav-6-2-1"></span>
|
|
||||||
|
|
||||||
#### Debian/Ubuntu
|
|
||||||
|
|
||||||
`sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev`
|
|
||||||
|
|
||||||
_Debian: 8, 9, 10_
|
|
||||||
|
|
||||||
_Ubuntu: 16.04, 18.04, 19.04_
|
|
||||||
|
|
||||||
_也成功测试了: Zorin 15, Parrot 4.7, Linuxmint 19, Elementary 5, Kali, Neon_, Pop!\_OS
|
|
||||||
|
|
||||||
<span id="nav-6-2-2"></span>
|
|
||||||
|
|
||||||
#### Arch Linux / ArchLabs / Ctlos Linux
|
|
||||||
|
|
||||||
`sudo pacman -S webkit2gtk gtk3`
|
|
||||||
|
|
||||||
_也成功测试了: Manjaro & ArcoLinux_
|
|
||||||
|
|
||||||
<span id="nav-6-2-3"></span>
|
|
||||||
|
|
||||||
#### Centos
|
|
||||||
|
|
||||||
`sudo yum install webkitgtk3-devel gtk3-devel`
|
|
||||||
|
|
||||||
_CentOS 6, 7_
|
|
||||||
|
|
||||||
<span id="nav-6-2-4"></span>
|
|
||||||
|
|
||||||
#### Fedora
|
|
||||||
|
|
||||||
`sudo yum install webkit2gtk3-devel gtk3-devel`
|
|
||||||
|
|
||||||
_Fedora 29, 30_
|
|
||||||
|
|
||||||
<span id="nav-6-2-5"></span>
|
|
||||||
|
|
||||||
#### VoidLinux & VoidLinux-musl
|
|
||||||
|
|
||||||
`xbps-install gtk+3-devel webkit2gtk-devel`
|
|
||||||
|
|
||||||
<span id="nav-6-2-6"></span>
|
|
||||||
|
|
||||||
#### Gentoo
|
|
||||||
|
|
||||||
`sudo emerge gtk+:3 webkit-gtk`
|
|
||||||
|
|
||||||
<span id="nav-6-3"></span>
|
|
||||||
|
|
||||||
### Windows
|
|
||||||
|
|
||||||
Windows 需要 GCC 和相关工具。 建议从 [http://tdm-gcc.tdragon.net/download](http://tdm-gcc.tdragon.net/download) 下载, 安装完成,您就可以开始了。
|
|
||||||
|
|
||||||
<span id="nav-7"></span>
|
|
||||||
|
|
||||||
## 使用方法
|
|
||||||
|
|
||||||
**确保 Go modules 是开启的:GO111MODULE=on 并且 go/bin 在您的 PATH 变量中。**
|
|
||||||
|
|
||||||
安装很简单,运行以下命令:
|
|
||||||
|
|
||||||
```
|
|
||||||
go get -u github.com/wailsapp/wails/cmd/wails
|
|
||||||
```
|
|
||||||
|
|
||||||
<span id="nav-7-1"></span>
|
|
||||||
|
|
||||||
### 下一步
|
|
||||||
|
|
||||||
建议在此时阅读 [https://wails.app](https://wails.app) 上面的文档.
|
|
||||||
|
|
||||||
<span id="nav-8"></span>
|
|
||||||
|
|
||||||
## 常见问题
|
|
||||||
|
|
||||||
- 它是 Electron 的替代品吗?
|
|
||||||
|
|
||||||
取决于您的要求。它旨在使 Go 程序员可以轻松制作轻量级桌面应用程序或在其现有应用程序中添加前端。尽管 Wails 当前不提供对诸如菜单之类的原生元素的钩子,但将来可能会改变。
|
|
||||||
|
|
||||||
- 这个项目针对的是哪些人?
|
|
||||||
|
|
||||||
希望将 HTML / JS / CSS 前端与其应用程序捆绑在一起的程序员,而不是借助创建服务并打开浏览器进行查看的方式。
|
|
||||||
|
|
||||||
- 名字怎么来的?
|
|
||||||
|
|
||||||
当我看到 WebView 时,我想"我真正想要的是围绕构建 WebView 应用程序工作,有点像 Rails 对于 Ruby"。因此,最初它是一个文字游戏(Webview on
|
|
||||||
Rails)。碰巧也是我来自的 [国家](https://en.wikipedia.org/wiki/Wales) 的英文名字的同音。所以就是它了。
|
|
||||||
|
|
||||||
<span id="nav-9"></span>
|
|
||||||
|
|
||||||
## 贡献者
|
|
||||||
|
|
||||||
<a href="https://github.com/qaisjp"><img src="https://github.com/qaisjp.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/alee792"><img src="https://github.com/alee792.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/lanzafame"><img src="https://github.com/lanzafame.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/mattn"><img src="https://github.com/mattn.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/0xflotus"><img src="https://github.com/0xflotus.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/mdhender"><img src="https://github.com/mdhender.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/fishfishfish2104"><img src="https://github.com/fishfishfish2104.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/intelwalk"><img src="https://github.com/intelwalk.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/ocelotsloth"><img src="https://github.com/ocelotsloth.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/bh90210"><img src="https://github.com/bh90210.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/iceleo-com"><img src="https://github.com/iceleo-com.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/fallendusk"><img src="https://github.com/fallendusk.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Chronophylos"><img src="https://github.com/Chronophylos.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Vaelatern"><img src="https://github.com/Vaelatern.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/mewmew"><img src="https://github.com/mewmew.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/kraney"><img src="https://github.com/kraney.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/JackMordaunt"><img src="https://github.com/JackMordaunt.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/MichaelHipp"><img src="https://github.com/MichaelHipp.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/tmclane"><img src="https://github.com/tmclane.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Rested"><img src="https://github.com/Rested.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Jarek-SRT"><img src="https://github.com/Jarek-SRT.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/konez2k"><img src="https://github.com/konez2k.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/sayuthisobri"><img src="https://github.com/sayuthisobri.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/dedo1911"><img src="https://github.com/dedo1911.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/fdidron"><img src="https://github.com/fdidron.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Splode"><img src="https://github.com/Splode.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Lyimmi"><img src="https://github.com/Lyimmi.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Unix4ever"><img src="https://github.com/Unix4ever.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/timkippdev"><img src="https://github.com/timkippdev.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/kyoto44"><img src="https://github.com/kyoto44.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/artooro"><img src="https://github.com/artooro.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/ilgityildirim"><img src="https://github.com/ilgityildirim.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/gelleson"><img src="https://github.com/gelleson.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/kmuchmore"><img src="https://github.com/kmuchmore.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/aayush420"><img src="https://github.com/aayush420.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Rezrazi"><img src="https://github.com/Rezrazi.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/misitebao"><img src="https://github.com/misitebao.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/DrunkenPoney"><img src="https://github.com/DrunkenPoney.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/SophieAu"><img src="https://github.com/SophieAu.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/alexmat"><img src="https://github.com/alexmat.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/RH12503"><img src="https://github.com/RH12503.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/hi019"><img src="https://github.com/hi019.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/Igogrek"><img src="https://github.com/Igogrek.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/aschey"><img src="https://github.com/aschey.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/akhudek"><img src="https://github.com/akhudek.png?size=40" width="40"/></a>
|
|
||||||
<a href="https://github.com/s12chung"><img src="https://github.com/s12chung.png?size=40" width="40"/></a>
|
|
||||||
|
|
||||||
<span id="nav-10"></span>
|
|
||||||
|
|
||||||
## 特别提及
|
|
||||||
|
|
||||||
如果没有以下人员,此项目或许永远不会存在:
|
|
||||||
|
|
||||||
- [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - 他的支持和反馈是巨大的。
|
|
||||||
- [Serge Zaitsev](https://github.com/zserge) - Wails 窗口所使用的 [Webview](https://github.com/zserge/webview) 的作者。
|
|
||||||
- [Byron](https://github.com/bh90210) - 有时,Byron 一个人保持这个项目活跃着。没有他令人难以置信的投入,我们永远不会得到 v1 。
|
|
||||||
|
|
||||||
编写项目代码时伴随着以下专辑:
|
|
||||||
|
|
||||||
- [Manic Street Preachers - Resistance Is Futile](https://open.spotify.com/album/1R2rsEUqXjIvAbzM0yHrxA)
|
|
||||||
- [Manic Street Preachers - This Is My Truth, Tell Me Yours](https://open.spotify.com/album/4VzCL9kjhgGQeKCiojK1YN)
|
|
||||||
- [The Midnight - Endless Summer](https://open.spotify.com/album/4Krg8zvprquh7TVn9OxZn8)
|
|
||||||
- [Gary Newman - Savage (Songs from a Broken World)](https://open.spotify.com/album/3kMfsD07Q32HRWKRrpcexr)
|
|
||||||
- [Steve Vai - Passion & Warfare](https://open.spotify.com/album/0oL0OhrE2rYVns4IGj8h2m)
|
|
||||||
- [Ben Howard - Every Kingdom](https://open.spotify.com/album/1nJsbWm3Yy2DW1KIc1OKle)
|
|
||||||
- [Ben Howard - Noonday Dream](https://open.spotify.com/album/6astw05cTiXEc2OvyByaPs)
|
|
||||||
- [Adwaith - Melyn](https://open.spotify.com/album/2vBE40Rp60tl7rNqIZjaXM)
|
|
||||||
- [Gwidaith Hen Fran - Cedors Hen Wrach](https://open.spotify.com/album/3v2hrfNGINPLuDP0YDTOjm)
|
|
||||||
- [Metallica - Metallica](https://open.spotify.com/album/2Kh43m04B1UkVcpcRa1Zug)
|
|
||||||
- [Bloc Party - Silent Alarm](https://open.spotify.com/album/6SsIdN05HQg2GwYLfXuzLB)
|
|
||||||
- [Maxthor - Another World](https://open.spotify.com/album/3tklE2Fgw1hCIUstIwPBJF)
|
|
||||||
- [Alun Tan Lan - Y Distawrwydd](https://open.spotify.com/album/0c32OywcLpdJCWWMC6vB8v)
|
|
||||||
|
|
||||||
<span id="nav-11"></span>
|
|
||||||
|
|
||||||
## 特别感谢
|
|
||||||
|
|
||||||
<p align="center" style="text-align: center">
|
|
||||||
<a href="https://pace.dev"><img src="/assets/images/pace.jpeg"/></a><br/>
|
|
||||||
<i>非常</i> 感谢<a href="https://pace.dev">Pace</a>对项目的赞助,并帮助将 Wails 移植到 Apple Silicon !<br/><br/>
|
|
||||||
如果您正在寻找一个强大并且快速和易于使用的项目管理工具,可以看看他们!<br/><br/>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align="center" style="text-align: center">
|
|
||||||
特别感谢 JetBrains 向我们捐赠许可!<br/><br/>
|
|
||||||
请点击 logo 让他们知道你的感激之情!<br/><br/>
|
|
||||||
<a href="https://www.jetbrains.com?from=Wails"><img src="/assets/images/jetbrains-grayscale.png" width="30%"></a>
|
|
||||||
</p>
|
|
||||||
19
app.go
@@ -2,6 +2,7 @@ package wails
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
"runtime"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/syossan27/tebata"
|
"github.com/syossan27/tebata"
|
||||||
@@ -12,7 +13,6 @@ import (
|
|||||||
"github.com/wailsapp/wails/lib/ipc"
|
"github.com/wailsapp/wails/lib/ipc"
|
||||||
"github.com/wailsapp/wails/lib/logger"
|
"github.com/wailsapp/wails/lib/logger"
|
||||||
"github.com/wailsapp/wails/lib/renderer"
|
"github.com/wailsapp/wails/lib/renderer"
|
||||||
wailsruntime "github.com/wailsapp/wails/runtime"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// -------------------------------- Compile time Flags ------------------------------
|
// -------------------------------- Compile time Flags ------------------------------
|
||||||
@@ -20,16 +20,6 @@ import (
|
|||||||
// BuildMode indicates what mode we are in
|
// BuildMode indicates what mode we are in
|
||||||
var BuildMode = cmd.BuildModeProd
|
var BuildMode = cmd.BuildModeProd
|
||||||
|
|
||||||
// Runtime is the Go Runtime struct
|
|
||||||
type Runtime = wailsruntime.Runtime
|
|
||||||
|
|
||||||
// Store is a state store used for syncing with
|
|
||||||
// the front end
|
|
||||||
type Store = wailsruntime.Store
|
|
||||||
|
|
||||||
// CustomLogger is a specialised logger
|
|
||||||
type CustomLogger = logger.CustomLogger
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// App defines the main application struct
|
// App defines the main application struct
|
||||||
@@ -116,6 +106,11 @@ func (a *App) start() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Enable console for Windows debug builds
|
||||||
|
if runtime.GOOS == "windows" && BuildMode == cmd.BuildModeDebug {
|
||||||
|
a.renderer.EnableConsole()
|
||||||
|
}
|
||||||
|
|
||||||
// Start signal handler
|
// Start signal handler
|
||||||
t := tebata.New(os.Interrupt, os.Kill, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)
|
t := tebata.New(os.Interrupt, os.Kill, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)
|
||||||
t.Reserve(func() {
|
t.Reserve(func() {
|
||||||
@@ -130,7 +125,7 @@ func (a *App) start() error {
|
|||||||
a.ipc.Start(a.eventManager, a.bindingManager)
|
a.ipc.Start(a.eventManager, a.bindingManager)
|
||||||
|
|
||||||
// Create the runtime
|
// Create the runtime
|
||||||
a.runtime = wailsruntime.NewRuntime(a.eventManager, a.renderer)
|
a.runtime = NewRuntime(a.eventManager, a.renderer)
|
||||||
|
|
||||||
// Start binding manager and give it our renderer
|
// Start binding manager and give it our renderer
|
||||||
err = a.bindingManager.Start(a.renderer, a.runtime)
|
err = a.bindingManager.Start(a.renderer, a.runtime)
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
//go:build linux || darwin || !windows
|
|
||||||
// +build linux darwin !windows
|
// +build linux darwin !windows
|
||||||
|
|
||||||
package wails
|
package wails
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
//go:build windows || !linux || !darwin
|
|
||||||
// +build windows !linux !darwin
|
// +build windows !linux !darwin
|
||||||
|
|
||||||
package wails
|
package wails
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
10
cmd/cmd-mewn.go
Normal file
21
cmd/fs.go
@@ -6,6 +6,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
@@ -49,7 +50,7 @@ func (fs *FSHelper) FileExists(path string) bool {
|
|||||||
|
|
||||||
// FindFile returns the first occurrence of match inside path.
|
// FindFile returns the first occurrence of match inside path.
|
||||||
func (fs *FSHelper) FindFile(path, match string) (string, error) {
|
func (fs *FSHelper) FindFile(path, match string) (string, error) {
|
||||||
files, err := os.ReadDir(path)
|
files, err := ioutil.ReadDir(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -68,7 +69,7 @@ func (fs *FSHelper) FindFile(path, match string) (string, error) {
|
|||||||
func (fs *FSHelper) CreateFile(filename string, data []byte) error {
|
func (fs *FSHelper) CreateFile(filename string, data []byte) error {
|
||||||
// Ensure directory exists
|
// Ensure directory exists
|
||||||
fs.MkDirs(filepath.Dir(filename))
|
fs.MkDirs(filepath.Dir(filename))
|
||||||
return os.WriteFile(filename, data, 0644)
|
return ioutil.WriteFile(filename, data, 0644)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MkDirs creates the given nested directories.
|
// MkDirs creates the given nested directories.
|
||||||
@@ -148,11 +149,21 @@ func (fs *FSHelper) LocalDir(dir string) (*Dir, error) {
|
|||||||
}, err
|
}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LoadRelativeFile loads the given file relative to the caller's directory
|
||||||
|
func (fs *FSHelper) LoadRelativeFile(relativePath string) ([]byte, error) {
|
||||||
|
_, filename, _, _ := runtime.Caller(0)
|
||||||
|
fullPath, err := filepath.Abs(filepath.Join(path.Dir(filename), relativePath))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ioutil.ReadFile(fullPath)
|
||||||
|
}
|
||||||
|
|
||||||
// GetSubdirs will return a list of FQPs to subdirectories in the given directory
|
// GetSubdirs will return a list of FQPs to subdirectories in the given directory
|
||||||
func (d *Dir) GetSubdirs() (map[string]string, error) {
|
func (d *Dir) GetSubdirs() (map[string]string, error) {
|
||||||
|
|
||||||
// Read in the directory information
|
// Read in the directory information
|
||||||
fileInfo, err := os.ReadDir(d.fullPath)
|
fileInfo, err := ioutil.ReadDir(d.fullPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -204,7 +215,7 @@ func (fs *FSHelper) SaveAsJSON(data interface{}, filename string) error {
|
|||||||
e.SetIndent("", " ")
|
e.SetIndent("", " ")
|
||||||
e.Encode(data)
|
e.Encode(data)
|
||||||
|
|
||||||
err := os.WriteFile(filename, buf.Bytes(), 0755)
|
err := ioutil.WriteFile(filename, buf.Bytes(), 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -220,7 +231,7 @@ func (fs *FSHelper) LoadAsString(filename string) (string, error) {
|
|||||||
|
|
||||||
// LoadAsBytes returns the contents of the file as a byte slice
|
// LoadAsBytes returns the contents of the file as a byte slice
|
||||||
func (fs *FSHelper) LoadAsBytes(filename string) ([]byte, error) {
|
func (fs *FSHelper) LoadAsBytes(filename string) ([]byte, error) {
|
||||||
return os.ReadFile(filename)
|
return ioutil.ReadFile(filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FileMD5 returns the md5sum of the given file
|
// FileMD5 returns the md5sum of the given file
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package cmd
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"sort"
|
"sort"
|
||||||
)
|
)
|
||||||
@@ -24,11 +24,11 @@ func (g *GitHubHelper) GetVersionTags() ([]*SemanticVersion, error) {
|
|||||||
result := []*SemanticVersion{}
|
result := []*SemanticVersion{}
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
resp, err := http.Get("https://api.github.com/repos/wailsapp/wails/releases")
|
resp, err := http.Get("https://api.github.com/repos/wailsapp/wails/tags")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
body, err := io.ReadAll(resp.Body)
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|||||||
180
cmd/helpers.go
@@ -2,6 +2,7 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"os/user"
|
"os/user"
|
||||||
@@ -11,13 +12,12 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/leaanthony/mewn"
|
||||||
|
"github.com/leaanthony/mewn/lib"
|
||||||
"github.com/leaanthony/slicer"
|
"github.com/leaanthony/slicer"
|
||||||
"github.com/leaanthony/spinner"
|
"github.com/leaanthony/spinner"
|
||||||
wailsruntime "github.com/wailsapp/wails/runtime"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const xgoVersion = "1.16.3"
|
|
||||||
|
|
||||||
var fs = NewFSHelper()
|
var fs = NewFSHelper()
|
||||||
|
|
||||||
// ValidateFrontendConfig checks if the frontend config is valid
|
// ValidateFrontendConfig checks if the frontend config is valid
|
||||||
@@ -46,7 +46,7 @@ func InstallGoDependencies(verbose bool) error {
|
|||||||
depSpinner.SetSpinSpeed(50)
|
depSpinner.SetSpinSpeed(50)
|
||||||
depSpinner.Start()
|
depSpinner.Start()
|
||||||
}
|
}
|
||||||
err := NewProgramHelper(verbose).RunCommand("go mod tidy")
|
err := NewProgramHelper(verbose).RunCommand("go get")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !verbose {
|
if !verbose {
|
||||||
depSpinner.Error()
|
depSpinner.Error()
|
||||||
@@ -59,6 +59,30 @@ func InstallGoDependencies(verbose bool) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EmbedAssets will embed the built frontend assets via mewn.
|
||||||
|
func EmbedAssets() ([]string, error) {
|
||||||
|
mewnFiles := lib.GetMewnFiles([]string{}, false)
|
||||||
|
|
||||||
|
referencedAssets, err := lib.GetReferencedAssets(mewnFiles)
|
||||||
|
if err != nil {
|
||||||
|
return []string{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
targetFiles := []string{}
|
||||||
|
|
||||||
|
for _, referencedAsset := range referencedAssets {
|
||||||
|
packfileData, err := lib.GeneratePackFileString(referencedAsset, false)
|
||||||
|
if err != nil {
|
||||||
|
return []string{}, err
|
||||||
|
}
|
||||||
|
targetFile := filepath.Join(referencedAsset.BaseDir, referencedAsset.PackageName+"-mewn.go")
|
||||||
|
targetFiles = append(targetFiles, targetFile)
|
||||||
|
ioutil.WriteFile(targetFile, []byte(packfileData), 0644)
|
||||||
|
}
|
||||||
|
|
||||||
|
return targetFiles, nil
|
||||||
|
}
|
||||||
|
|
||||||
func InitializeCrossCompilation(verbose bool) error {
|
func InitializeCrossCompilation(verbose bool) error {
|
||||||
// Check Docker
|
// Check Docker
|
||||||
if err := CheckIfInstalled("docker"); err != nil {
|
if err := CheckIfInstalled("docker"); err != nil {
|
||||||
@@ -66,17 +90,16 @@ func InitializeCrossCompilation(verbose bool) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var packSpinner *spinner.Spinner
|
var packSpinner *spinner.Spinner
|
||||||
msg := fmt.Sprintf("Pulling wailsapp/xgo:%s docker image... (may take a while)", xgoVersion)
|
|
||||||
if !verbose {
|
if !verbose {
|
||||||
packSpinner = spinner.New(msg)
|
packSpinner = spinner.New("Pulling wailsapp/xgo:latest docker image... (may take a while)")
|
||||||
packSpinner.SetSpinSpeed(50)
|
packSpinner.SetSpinSpeed(50)
|
||||||
packSpinner.Start()
|
packSpinner.Start()
|
||||||
} else {
|
} else {
|
||||||
println(msg)
|
println("Pulling wailsapp/xgo:latest docker image... (may take a while)")
|
||||||
}
|
}
|
||||||
|
|
||||||
err := NewProgramHelper(verbose).RunCommandArray([]string{"docker",
|
err := NewProgramHelper(verbose).RunCommandArray([]string{"docker",
|
||||||
"pull", fmt.Sprintf("wailsapp/xgo:%s", xgoVersion)})
|
"pull", "wailsapp/xgo:latest"})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if packSpinner != nil {
|
if packSpinner != nil {
|
||||||
@@ -91,7 +114,7 @@ func InitializeCrossCompilation(verbose bool) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildDocker builds the project using the cross compiling wailsapp/xgo:<xgoVersion> container
|
// BuildDocker builds the project using the cross compiling wailsapp/xgo:latest container
|
||||||
func BuildDocker(binaryName string, buildMode string, projectOptions *ProjectOptions) error {
|
func BuildDocker(binaryName string, buildMode string, projectOptions *ProjectOptions) error {
|
||||||
var packSpinner *spinner.Spinner
|
var packSpinner *spinner.Spinner
|
||||||
if buildMode == BuildModeBridge {
|
if buildMode == BuildModeBridge {
|
||||||
@@ -101,16 +124,13 @@ func BuildDocker(binaryName string, buildMode string, projectOptions *ProjectOpt
|
|||||||
// Check build directory
|
// Check build directory
|
||||||
buildDirectory := filepath.Join(fs.Cwd(), "build")
|
buildDirectory := filepath.Join(fs.Cwd(), "build")
|
||||||
if !fs.DirExists(buildDirectory) {
|
if !fs.DirExists(buildDirectory) {
|
||||||
err := fs.MkDir(buildDirectory)
|
fs.MkDir(buildDirectory)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buildCommand := slicer.String()
|
buildCommand := slicer.String()
|
||||||
userid := 1000
|
userid := 1000
|
||||||
currentUser, _ := user.Current()
|
user, _ := user.Current()
|
||||||
if i, err := strconv.Atoi(currentUser.Uid); err == nil {
|
if i, err := strconv.Atoi(user.Uid); err == nil {
|
||||||
userid = i
|
userid = i
|
||||||
}
|
}
|
||||||
for _, arg := range []string{
|
for _, arg := range []string{
|
||||||
@@ -120,31 +140,24 @@ func BuildDocker(binaryName string, buildMode string, projectOptions *ProjectOpt
|
|||||||
"-v", fmt.Sprintf("%s:/build", filepath.Join(fs.Cwd(), "build")),
|
"-v", fmt.Sprintf("%s:/build", filepath.Join(fs.Cwd(), "build")),
|
||||||
"-v", fmt.Sprintf("%s:/source", fs.Cwd()),
|
"-v", fmt.Sprintf("%s:/source", fs.Cwd()),
|
||||||
"-e", fmt.Sprintf("LOCAL_USER_ID=%v", userid),
|
"-e", fmt.Sprintf("LOCAL_USER_ID=%v", userid),
|
||||||
"-e", fmt.Sprintf("FLAG_TAGS=%s", projectOptions.Tags),
|
|
||||||
"-e", fmt.Sprintf("FLAG_LDFLAGS=%s", ldFlags(projectOptions, buildMode)),
|
"-e", fmt.Sprintf("FLAG_LDFLAGS=%s", ldFlags(projectOptions, buildMode)),
|
||||||
"-e", "FLAG_V=false",
|
"-e", "FLAG_V=false",
|
||||||
"-e", "FLAG_X=false",
|
"-e", "FLAG_X=false",
|
||||||
"-e", "FLAG_RACE=false",
|
"-e", "FLAG_RACE=false",
|
||||||
"-e", "FLAG_BUILDMODE=default",
|
"-e", "FLAG_BUILDMODE=default",
|
||||||
"-e", "FLAG_TRIMPATH=false",
|
"-e", "FLAG_TRIMPATH=false",
|
||||||
"-e", fmt.Sprintf("TARGETS=%s/%s", projectOptions.Platform, projectOptions.Architecture),
|
"-e", fmt.Sprintf("TARGETS=%s", projectOptions.Platform+"/"+projectOptions.Architecture),
|
||||||
"-e", "GOPROXY=",
|
"-e", "GOPROXY=",
|
||||||
"-e", "GO111MODULE=on",
|
"-e", "GO111MODULE=on",
|
||||||
|
"wailsapp/xgo:latest",
|
||||||
|
".",
|
||||||
} {
|
} {
|
||||||
buildCommand.Add(arg)
|
buildCommand.Add(arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
if projectOptions.GoPath != "" {
|
|
||||||
buildCommand.Add("-v")
|
|
||||||
buildCommand.Add(fmt.Sprintf("%s:/go", projectOptions.GoPath))
|
|
||||||
}
|
|
||||||
|
|
||||||
buildCommand.Add(fmt.Sprintf("wailsapp/xgo:%s", xgoVersion))
|
|
||||||
buildCommand.Add(".")
|
|
||||||
|
|
||||||
compileMessage := fmt.Sprintf(
|
compileMessage := fmt.Sprintf(
|
||||||
"Packing + Compiling project for %s/%s using docker image wailsapp/xgo:%s",
|
"Packing + Compiling project for %s/%s using docker image wailsapp/xgo:latest",
|
||||||
projectOptions.Platform, projectOptions.Architecture, xgoVersion)
|
projectOptions.Platform, projectOptions.Architecture)
|
||||||
|
|
||||||
if buildMode == BuildModeDebug {
|
if buildMode == BuildModeDebug {
|
||||||
compileMessage += " (Debug Mode)"
|
compileMessage += " (Debug Mode)"
|
||||||
@@ -175,6 +188,11 @@ func BuildDocker(binaryName string, buildMode string, projectOptions *ProjectOpt
|
|||||||
// BuildNative builds on the target platform itself.
|
// BuildNative builds on the target platform itself.
|
||||||
func BuildNative(binaryName string, forceRebuild bool, buildMode string, projectOptions *ProjectOptions) error {
|
func BuildNative(binaryName string, forceRebuild bool, buildMode string, projectOptions *ProjectOptions) error {
|
||||||
|
|
||||||
|
// Check Mewn is installed
|
||||||
|
if err := CheckMewn(projectOptions.Verbose); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if err := CheckWindres(); err != nil {
|
if err := CheckWindres(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -198,6 +216,10 @@ func BuildNative(binaryName string, forceRebuild bool, buildMode string, project
|
|||||||
buildCommand.Add("go")
|
buildCommand.Add("go")
|
||||||
|
|
||||||
buildCommand.Add("build")
|
buildCommand.Add("build")
|
||||||
|
if buildMode == BuildModeBridge {
|
||||||
|
// Ignore errors
|
||||||
|
buildCommand.Add("-i")
|
||||||
|
}
|
||||||
|
|
||||||
if binaryName != "" {
|
if binaryName != "" {
|
||||||
// Alter binary name based on OS
|
// Alter binary name based on OS
|
||||||
@@ -221,10 +243,6 @@ func BuildNative(binaryName string, forceRebuild bool, buildMode string, project
|
|||||||
|
|
||||||
buildCommand.AddSlice([]string{"-ldflags", ldFlags(projectOptions, buildMode)})
|
buildCommand.AddSlice([]string{"-ldflags", ldFlags(projectOptions, buildMode)})
|
||||||
|
|
||||||
if projectOptions.Tags != "" {
|
|
||||||
buildCommand.AddSlice([]string{"--tags", projectOptions.Tags})
|
|
||||||
}
|
|
||||||
|
|
||||||
if projectOptions.Verbose {
|
if projectOptions.Verbose {
|
||||||
fmt.Printf("Command: %v\n", buildCommand.AsSlice())
|
fmt.Printf("Command: %v\n", buildCommand.AsSlice())
|
||||||
}
|
}
|
||||||
@@ -247,6 +265,12 @@ func BuildNative(binaryName string, forceRebuild bool, buildMode string, project
|
|||||||
func BuildApplication(binaryName string, forceRebuild bool, buildMode string, packageApp bool, projectOptions *ProjectOptions) error {
|
func BuildApplication(binaryName string, forceRebuild bool, buildMode string, packageApp bool, projectOptions *ProjectOptions) error {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
// embed resources
|
||||||
|
targetFiles, err := EmbedAssets()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if projectOptions.CrossCompile {
|
if projectOptions.CrossCompile {
|
||||||
if err := InitializeCrossCompilation(projectOptions.Verbose); err != nil {
|
if err := InitializeCrossCompilation(projectOptions.Verbose); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -262,6 +286,20 @@ func BuildApplication(binaryName string, forceRebuild bool, buildMode string, pa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cleanup temporary embedded assets
|
||||||
|
defer func() {
|
||||||
|
for _, filename := range targetFiles {
|
||||||
|
if err := os.Remove(filename); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Removed by popular demand
|
||||||
|
// TODO: Potentially add a flag to cleanup
|
||||||
|
// if projectOptions.Platform == "windows" {
|
||||||
|
// helper.CleanWindows(projectOptions)
|
||||||
|
// }
|
||||||
|
}()
|
||||||
|
|
||||||
if projectOptions.CrossCompile {
|
if projectOptions.CrossCompile {
|
||||||
err = BuildDocker(binaryName, buildMode, projectOptions)
|
err = BuildDocker(binaryName, buildMode, projectOptions)
|
||||||
} else {
|
} else {
|
||||||
@@ -326,6 +364,30 @@ func BuildFrontend(projectOptions *ProjectOptions) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CheckMewn checks if mewn is installed and if not, attempts to fetch it
|
||||||
|
func CheckMewn(verbose bool) (err error) {
|
||||||
|
programHelper := NewProgramHelper(verbose)
|
||||||
|
if !programHelper.IsInstalled("mewn") {
|
||||||
|
var buildSpinner *spinner.Spinner
|
||||||
|
if !verbose {
|
||||||
|
buildSpinner = spinner.New()
|
||||||
|
buildSpinner.SetSpinSpeed(50)
|
||||||
|
buildSpinner.Start("Installing Mewn asset packer...")
|
||||||
|
}
|
||||||
|
err := programHelper.InstallGoPackage("github.com/leaanthony/mewn/cmd/mewn")
|
||||||
|
if err != nil {
|
||||||
|
if buildSpinner != nil {
|
||||||
|
buildSpinner.Error()
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if buildSpinner != nil {
|
||||||
|
buildSpinner.Success()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// CheckWindres checks if Windres is installed and if not, aborts
|
// CheckWindres checks if Windres is installed and if not, aborts
|
||||||
func CheckWindres() (err error) {
|
func CheckWindres() (err error) {
|
||||||
if runtime.GOOS != "windows" { // FIXME: Handle windows cross-compile for windows!
|
if runtime.GOOS != "windows" { // FIXME: Handle windows cross-compile for windows!
|
||||||
@@ -421,18 +483,11 @@ func InstallFrontendDeps(projectDir string, projectOptions *ProjectOptions, forc
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update md5sum file
|
// Update md5sum file
|
||||||
err := os.WriteFile(md5sumFile, []byte(packageJSONMD5), 0644)
|
ioutil.WriteFile(md5sumFile, []byte(packageJSONMD5), 0644)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Install the runtime
|
// Install the runtime
|
||||||
if caller == "build" {
|
err = InstallRuntime(caller, projectDir, projectOptions)
|
||||||
err = InstallProdRuntime(projectDir, projectOptions)
|
|
||||||
} else {
|
|
||||||
err = InstallBridge(projectDir, projectOptions)
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -445,17 +500,28 @@ func InstallFrontendDeps(projectDir string, projectOptions *ProjectOptions, forc
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// InstallRuntime installs the correct runtime for the type of build
|
||||||
|
func InstallRuntime(caller string, projectDir string, projectOptions *ProjectOptions) error {
|
||||||
|
if caller == "build" {
|
||||||
|
return InstallProdRuntime(projectDir, projectOptions)
|
||||||
|
}
|
||||||
|
|
||||||
|
return InstallBridge(projectDir, projectOptions)
|
||||||
|
}
|
||||||
|
|
||||||
// InstallBridge installs the relevant bridge javascript library
|
// InstallBridge installs the relevant bridge javascript library
|
||||||
func InstallBridge(projectDir string, projectOptions *ProjectOptions) error {
|
func InstallBridge(projectDir string, projectOptions *ProjectOptions) error {
|
||||||
|
bridgeFileData := mewn.String("../runtime/assets/bridge.js")
|
||||||
bridgeFileTarget := filepath.Join(projectDir, projectOptions.FrontEnd.Dir, "node_modules", "@wailsapp", "runtime", "init.js")
|
bridgeFileTarget := filepath.Join(projectDir, projectOptions.FrontEnd.Dir, "node_modules", "@wailsapp", "runtime", "init.js")
|
||||||
err := fs.CreateFile(bridgeFileTarget, wailsruntime.BridgeJS)
|
err := fs.CreateFile(bridgeFileTarget, []byte(bridgeFileData))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstallProdRuntime installs the production runtime
|
// InstallProdRuntime installs the production runtime
|
||||||
func InstallProdRuntime(projectDir string, projectOptions *ProjectOptions) error {
|
func InstallProdRuntime(projectDir string, projectOptions *ProjectOptions) error {
|
||||||
|
prodInit := mewn.String("../runtime/js/runtime/init.js")
|
||||||
bridgeFileTarget := filepath.Join(projectDir, projectOptions.FrontEnd.Dir, "node_modules", "@wailsapp", "runtime", "init.js")
|
bridgeFileTarget := filepath.Join(projectDir, projectOptions.FrontEnd.Dir, "node_modules", "@wailsapp", "runtime", "init.js")
|
||||||
err := fs.CreateFile(bridgeFileTarget, wailsruntime.InitJS)
|
err := fs.CreateFile(bridgeFileTarget, []byte(prodInit))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -464,9 +530,6 @@ func InstallProdRuntime(projectDir string, projectOptions *ProjectOptions) error
|
|||||||
func ServeProject(projectOptions *ProjectOptions, logger *Logger) error {
|
func ServeProject(projectOptions *ProjectOptions, logger *Logger) error {
|
||||||
go func() {
|
go func() {
|
||||||
time.Sleep(2 * time.Second)
|
time.Sleep(2 * time.Second)
|
||||||
if projectOptions.Platform == "windows" {
|
|
||||||
logger.Yellow("*** Please note: Windows builds use mshtml which is only compatible with IE11. We strongly recommend only using IE11 when running 'wails serve'! For more information, please read https://wails.app/guides/windows/ ***")
|
|
||||||
}
|
|
||||||
logger.Green(">>>>> To connect, you will need to run '" + projectOptions.FrontEnd.Serve + "' in the '" + projectOptions.FrontEnd.Dir + "' directory <<<<<")
|
logger.Green(">>>>> To connect, you will need to run '" + projectOptions.FrontEnd.Serve + "' in the '" + projectOptions.FrontEnd.Dir + "' directory <<<<<")
|
||||||
}()
|
}()
|
||||||
location, err := filepath.Abs(filepath.Join("build", projectOptions.BinaryName))
|
location, err := filepath.Abs(filepath.Join("build", projectOptions.BinaryName))
|
||||||
@@ -475,22 +538,7 @@ func ServeProject(projectOptions *ProjectOptions, logger *Logger) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
logger.Yellow("Serving Application: " + location)
|
logger.Yellow("Serving Application: " + location)
|
||||||
var args []string
|
cmd := exec.Command(location)
|
||||||
if len(os.Args) > 2 {
|
|
||||||
foundArgSep := false
|
|
||||||
for index, arg := range os.Args[2:] {
|
|
||||||
if arg == "--" {
|
|
||||||
foundArgSep = true
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if foundArgSep {
|
|
||||||
args = os.Args[index:]
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
logger.Yellow("Passing arguments: %+v", args)
|
|
||||||
}
|
|
||||||
cmd := exec.Command(location, args...)
|
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
err = cmd.Run()
|
err = cmd.Run()
|
||||||
@@ -513,10 +561,6 @@ func ldFlags(po *ProjectOptions, buildMode string) string {
|
|||||||
ldflags += "-H windowsgui "
|
ldflags += "-H windowsgui "
|
||||||
}
|
}
|
||||||
|
|
||||||
if po.UseFirebug {
|
|
||||||
ldflags += "-X github.com/wailsapp/wails/lib/renderer.UseFirebug=true "
|
|
||||||
}
|
|
||||||
|
|
||||||
ldflags += "-X github.com/wailsapp/wails.BuildMode=" + buildMode
|
ldflags += "-X github.com/wailsapp/wails.BuildMode=" + buildMode
|
||||||
|
|
||||||
// Add additional ldflags passed in via the `ldflags` cli flag
|
// Add additional ldflags passed in via the `ldflags` cli flag
|
||||||
@@ -534,9 +578,3 @@ func ldFlags(po *ProjectOptions, buildMode string) string {
|
|||||||
}
|
}
|
||||||
return ldflags
|
return ldflags
|
||||||
}
|
}
|
||||||
|
|
||||||
func getGitConfigValue(key string) (string, error) {
|
|
||||||
output, err := exec.Command("git", "config", "--get", "--null", key).Output()
|
|
||||||
// When using --null git appends a null character (\u0000) to the command output
|
|
||||||
return strings.TrimRight(string(output), "\u0000"), err
|
|
||||||
}
|
|
||||||
|
|||||||
50
cmd/linux.go
@@ -2,6 +2,7 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
@@ -62,18 +63,6 @@ const (
|
|||||||
PopOS
|
PopOS
|
||||||
// Solus distribution
|
// Solus distribution
|
||||||
Solus
|
Solus
|
||||||
// Ctlos Linux distribution
|
|
||||||
Ctlos
|
|
||||||
// EndeavourOS linux distribution
|
|
||||||
EndeavourOS
|
|
||||||
// Crux linux distribution
|
|
||||||
Crux
|
|
||||||
// RHEL distribution
|
|
||||||
RHEL
|
|
||||||
// NixOS distribution
|
|
||||||
NixOS
|
|
||||||
// Artix linux distribution
|
|
||||||
ArtixLinux
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// DistroInfo contains all the information relating to a linux distribution
|
// DistroInfo contains all the information relating to a linux distribution
|
||||||
@@ -94,7 +83,7 @@ func GetLinuxDistroInfo() *DistroInfo {
|
|||||||
}
|
}
|
||||||
_, err := os.Stat("/etc/os-release")
|
_, err := os.Stat("/etc/os-release")
|
||||||
if !os.IsNotExist(err) {
|
if !os.IsNotExist(err) {
|
||||||
osRelease, _ := os.ReadFile("/etc/os-release")
|
osRelease, _ := ioutil.ReadFile("/etc/os-release")
|
||||||
result = parseOsRelease(string(osRelease))
|
result = parseOsRelease(string(osRelease))
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
@@ -136,14 +125,10 @@ func parseOsRelease(osRelease string) *DistroInfo {
|
|||||||
result.Distribution = Fedora
|
result.Distribution = Fedora
|
||||||
case "centos":
|
case "centos":
|
||||||
result.Distribution = CentOS
|
result.Distribution = CentOS
|
||||||
case "rhel":
|
|
||||||
result.Distribution = RHEL
|
|
||||||
case "arch":
|
case "arch":
|
||||||
result.Distribution = Arch
|
result.Distribution = Arch
|
||||||
case "archlabs":
|
case "archlabs":
|
||||||
result.Distribution = ArchLabs
|
result.Distribution = ArchLabs
|
||||||
case "ctlos":
|
|
||||||
result.Distribution = Ctlos
|
|
||||||
case "debian":
|
case "debian":
|
||||||
result.Distribution = Debian
|
result.Distribution = Debian
|
||||||
case "ubuntu":
|
case "ubuntu":
|
||||||
@@ -182,14 +167,6 @@ func parseOsRelease(osRelease string) *DistroInfo {
|
|||||||
result.Distribution = PopOS
|
result.Distribution = PopOS
|
||||||
case "solus":
|
case "solus":
|
||||||
result.Distribution = Solus
|
result.Distribution = Solus
|
||||||
case "endeavouros":
|
|
||||||
result.Distribution = EndeavourOS
|
|
||||||
case "crux":
|
|
||||||
result.Distribution = Crux
|
|
||||||
case "nixos":
|
|
||||||
result.Distribution = NixOS
|
|
||||||
case "artix":
|
|
||||||
result.Distribution = ArtixLinux
|
|
||||||
default:
|
default:
|
||||||
result.Distribution = Unknown
|
result.Distribution = Unknown
|
||||||
}
|
}
|
||||||
@@ -270,29 +247,6 @@ func RpmInstalled(packageName string) (bool, error) {
|
|||||||
return exitCode == 0, nil
|
return exitCode == 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrtGetInstalled uses prt-get to see if a package is installed
|
|
||||||
func PrtGetInstalled(packageName string) (bool, error) {
|
|
||||||
program := NewProgramHelper()
|
|
||||||
prtget := program.FindProgram("prt-get")
|
|
||||||
if prtget == nil {
|
|
||||||
return false, fmt.Errorf("cannot check dependencies: prt-get not found")
|
|
||||||
}
|
|
||||||
_, _, exitCode, _ := prtget.Run("isinst", packageName)
|
|
||||||
return exitCode == 0, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// NixEnvInstalled uses nix-env to see if a package is installed
|
|
||||||
func NixEnvInstalled(packageName string) (bool, error) {
|
|
||||||
program := NewProgramHelper()
|
|
||||||
nixEnv := program.FindProgram("nix-env")
|
|
||||||
if nixEnv == nil {
|
|
||||||
return false, fmt.Errorf("cannot check dependencies: nix-env not found")
|
|
||||||
}
|
|
||||||
packageName = strings.ReplaceAll(packageName, "+", `\+`)
|
|
||||||
_, _, exitCode, _ := nixEnv.Run("-q", packageName)
|
|
||||||
return exitCode == 0, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// RequestSupportForDistribution promts the user to submit a request to support their
|
// RequestSupportForDistribution promts the user to submit a request to support their
|
||||||
// currently unsupported distribution
|
// currently unsupported distribution
|
||||||
func RequestSupportForDistribution(distroInfo *DistroInfo) error {
|
func RequestSupportForDistribution(distroInfo *DistroInfo) error {
|
||||||
|
|||||||
@@ -1,15 +1,11 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "embed"
|
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed linuxdb.yaml
|
|
||||||
var LinuxDBYaml []byte
|
|
||||||
|
|
||||||
// LinuxDB is the database for linux distribution data.
|
// LinuxDB is the database for linux distribution data.
|
||||||
type LinuxDB struct {
|
type LinuxDB struct {
|
||||||
Distributions map[string]*Distribution `yaml:"distributions"`
|
Distributions map[string]*Distribution `yaml:"distributions"`
|
||||||
@@ -82,10 +78,14 @@ func (l *LinuxDB) GetDistro(distro string) *Distribution {
|
|||||||
// NewLinuxDB creates a new LinuxDB instance from the bundled
|
// NewLinuxDB creates a new LinuxDB instance from the bundled
|
||||||
// linuxdb.yaml file.
|
// linuxdb.yaml file.
|
||||||
func NewLinuxDB() *LinuxDB {
|
func NewLinuxDB() *LinuxDB {
|
||||||
|
data, err := fs.LoadRelativeFile("./linuxdb.yaml")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Could not load linuxdb.yaml")
|
||||||
|
}
|
||||||
result := LinuxDB{
|
result := LinuxDB{
|
||||||
Distributions: make(map[string]*Distribution),
|
Distributions: make(map[string]*Distribution),
|
||||||
}
|
}
|
||||||
err := result.ImportData(LinuxDBYaml)
|
err = result.ImportData(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
100
cmd/linuxdb.yaml
@@ -138,25 +138,6 @@ distributions:
|
|||||||
help: Please install with `sudo yum install gtk3-devel` and try again
|
help: Please install with `sudo yum install gtk3-devel` and try again
|
||||||
- name: webkitgtk3-devel
|
- name: webkitgtk3-devel
|
||||||
help: Please install with `sudo yum install webkitgtk3-devel` and try again
|
help: Please install with `sudo yum install webkitgtk3-devel` and try again
|
||||||
rhel:
|
|
||||||
id: rhel
|
|
||||||
releases:
|
|
||||||
default:
|
|
||||||
version: default
|
|
||||||
name: Red Hat Enterprise Linux
|
|
||||||
gccversioncommand: *gccdumpversion
|
|
||||||
programs:
|
|
||||||
- name: gcc
|
|
||||||
help: Please install with `sudo yum install gcc-c++ make` and try again
|
|
||||||
- name: pkg-config
|
|
||||||
help: Please install with `sudo yum install pkgconf-pkg-config` and try again
|
|
||||||
- name: npm
|
|
||||||
help: Please install with `sudo yum install epel-release && sudo yum install nodejs` and try again
|
|
||||||
libraries:
|
|
||||||
- name: gtk3-devel
|
|
||||||
help: Please install with `sudo yum install gtk3-devel` and try again
|
|
||||||
- name: webkitgtk3-devel
|
|
||||||
help: Please install with `sudo yum install webkitgtk3-devel` and try again
|
|
||||||
fedora:
|
fedora:
|
||||||
id: fedora
|
id: fedora
|
||||||
releases:
|
releases:
|
||||||
@@ -213,33 +194,6 @@ distributions:
|
|||||||
gccversioncommand: *gccdumpversion
|
gccversioncommand: *gccdumpversion
|
||||||
programs: *archdefaultprograms
|
programs: *archdefaultprograms
|
||||||
libraries: *archdefaultlibraries
|
libraries: *archdefaultlibraries
|
||||||
artix:
|
|
||||||
id: artix
|
|
||||||
releases:
|
|
||||||
default:
|
|
||||||
version: default
|
|
||||||
name: Artix Linux
|
|
||||||
gccversioncommand: *gccdumpversion
|
|
||||||
programs: *archdefaultprograms
|
|
||||||
libraries: *archdefaultlibraries
|
|
||||||
ctlos:
|
|
||||||
id: ctlos
|
|
||||||
releases:
|
|
||||||
default:
|
|
||||||
version: default
|
|
||||||
name: Ctlos Linux
|
|
||||||
gccversioncommand: *gccdumpversion
|
|
||||||
programs: *archdefaultprograms
|
|
||||||
libraries: *archdefaultlibraries
|
|
||||||
endeavouros:
|
|
||||||
id: endeavouros
|
|
||||||
releases:
|
|
||||||
default:
|
|
||||||
version: default
|
|
||||||
name: EndeavourOS
|
|
||||||
gccversioncommand: *gccdumpversion
|
|
||||||
programs: *archdefaultprograms
|
|
||||||
libraries: *archdefaultlibraries
|
|
||||||
manjaro:
|
manjaro:
|
||||||
id: manjaro
|
id: manjaro
|
||||||
releases:
|
releases:
|
||||||
@@ -327,49 +281,11 @@ distributions:
|
|||||||
- name: webkit2gtk3-devel
|
- name: webkit2gtk3-devel
|
||||||
help: Please install with `sudo zypper in webkit2gtk3-devel` and try again
|
help: Please install with `sudo zypper in webkit2gtk3-devel` and try again
|
||||||
opensuse-leap:
|
opensuse-leap:
|
||||||
id: opensuse-leap
|
id: opensuse-leap
|
||||||
releases:
|
releases:
|
||||||
default:
|
default:
|
||||||
version: default
|
version: default
|
||||||
name: openSUSE Leap
|
name: openSUSE Leap
|
||||||
gccversioncommand: *gccdumpfullversion
|
gccversioncommand: *gccdumpfullversion
|
||||||
programs: *opensusedefaultprograms
|
programs: *opensusedefaultprograms
|
||||||
libraries: *opensusedefaultlibraries
|
libraries: *opensusedefaultlibraries
|
||||||
crux:
|
|
||||||
id: crux
|
|
||||||
releases:
|
|
||||||
default:
|
|
||||||
version: default
|
|
||||||
name: Crux Linux
|
|
||||||
gccversioncommand: *gccdumpversion
|
|
||||||
programs:
|
|
||||||
- name: gcc
|
|
||||||
help: Please install with `sudo prt-get depinst gcc-c++ make` and try again
|
|
||||||
- name: pkg-config
|
|
||||||
help: Please install with `sudo prt-get depinst pkg-config` and try again
|
|
||||||
- name: npm
|
|
||||||
help: Please install with `sudo prt-get depinst nodejs` and try again
|
|
||||||
libraries:
|
|
||||||
- name: gtk3
|
|
||||||
help: Please install with `sudo prt-get depinst gtk3` and try again
|
|
||||||
- name: webkitgtk
|
|
||||||
help: Please install with `sudo prt-get depinst webkitgtk` and try again
|
|
||||||
nixos:
|
|
||||||
id: nixos
|
|
||||||
releases:
|
|
||||||
default:
|
|
||||||
version: default
|
|
||||||
name: NixOS
|
|
||||||
gccversioncommand: *gccdumpversion
|
|
||||||
programs:
|
|
||||||
- name: gcc
|
|
||||||
help: Please install with `nix-env -iA nixos.gcc`
|
|
||||||
- name: pkg-config
|
|
||||||
help: Please install with `nix-env -iA nixos.pkg-config`
|
|
||||||
- name: npm
|
|
||||||
help: Please install with `nix-env -iA nixos.nodejs`
|
|
||||||
libraries:
|
|
||||||
- name: gtk+3
|
|
||||||
help: Please install with `nix-env -iA nixos.gtk3`
|
|
||||||
- name: webkitgtk
|
|
||||||
help: Please install with `nix-env -iA nixos.nodePackages.webkitgtk`
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"image"
|
"image"
|
||||||
"image/png"
|
"image/png"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -243,7 +244,7 @@ func (b *PackageHelper) packageOSX(po *ProjectOptions) error {
|
|||||||
// No - create a new plist from our defaults
|
// No - create a new plist from our defaults
|
||||||
tmpl := template.New("infoPlist")
|
tmpl := template.New("infoPlist")
|
||||||
plistFile := filepath.Join(b.getPackageFileBaseDir(), "info.plist")
|
plistFile := filepath.Join(b.getPackageFileBaseDir(), "info.plist")
|
||||||
infoPlist, err := os.ReadFile(plistFile)
|
infoPlist, err := ioutil.ReadFile(plistFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -257,13 +258,13 @@ func (b *PackageHelper) packageOSX(po *ProjectOptions) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Save to the package
|
// Save to the package
|
||||||
err = os.WriteFile(plistFilename, tpl.Bytes(), 0644)
|
err = ioutil.WriteFile(plistFilename, tpl.Bytes(), 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also write to project directory for customisation
|
// Also write to project directory for customisation
|
||||||
err = os.WriteFile(customPlist, tpl.Bytes(), 0644)
|
err = ioutil.WriteFile(customPlist, tpl.Bytes(), 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -313,12 +314,10 @@ func (b *PackageHelper) PackageWindows(po *ProjectOptions, cleanUp bool) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate icon from PNG if it doesn't exist
|
// Generate icon from PNG
|
||||||
if !fs.FileExists(basename + ".ico") {
|
err = generateWindowsIcon(icon, basename+".ico")
|
||||||
err = generateWindowsIcon(icon, basename+".ico")
|
if err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy manifest
|
// Copy manifest
|
||||||
@@ -335,12 +334,12 @@ func (b *PackageHelper) PackageWindows(po *ProjectOptions, cleanUp bool) error {
|
|||||||
tgtRCFile := filepath.Join(outputDir, basename+".rc")
|
tgtRCFile := filepath.Join(outputDir, basename+".rc")
|
||||||
if !b.fs.FileExists(tgtRCFile) {
|
if !b.fs.FileExists(tgtRCFile) {
|
||||||
srcRCfile := filepath.Join(b.getPackageFileBaseDir(), "wails.rc")
|
srcRCfile := filepath.Join(b.getPackageFileBaseDir(), "wails.rc")
|
||||||
rcfilebytes, err := os.ReadFile(srcRCfile)
|
rcfilebytes, err := ioutil.ReadFile(srcRCfile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
rcfiledata := strings.Replace(string(rcfilebytes), "$NAME$", basename, -1)
|
rcfiledata := strings.Replace(string(rcfilebytes), "$NAME$", basename, -1)
|
||||||
err = os.WriteFile(tgtRCFile, []byte(rcfiledata), 0755)
|
err = ioutil.WriteFile(tgtRCFile, []byte(rcfiledata), 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -355,7 +354,7 @@ func (b *PackageHelper) PackageWindows(po *ProjectOptions, cleanUp bool) error {
|
|||||||
"docker", "run", "--rm",
|
"docker", "run", "--rm",
|
||||||
"-v", outputDir + ":/build",
|
"-v", outputDir + ":/build",
|
||||||
"--entrypoint", "/bin/sh",
|
"--entrypoint", "/bin/sh",
|
||||||
"wailsapp/xgo:1.16.3",
|
"wailsapp/xgo:latest",
|
||||||
"-c", "/usr/bin/x86_64-w64-mingw32-windres -o /build/" + basename + "-res.syso /build/" + basename + ".rc",
|
"-c", "/usr/bin/x86_64-w64-mingw32-windres -o /build/" + basename + "-res.syso /build/" + basename + ".rc",
|
||||||
}
|
}
|
||||||
if err := NewProgramHelper().RunCommandArray(args); err != nil {
|
if err := NewProgramHelper().RunCommandArray(args); err != nil {
|
||||||
@@ -388,11 +387,11 @@ func (b *PackageHelper) copyIcon() (string, error) {
|
|||||||
|
|
||||||
// Install default icon
|
// Install default icon
|
||||||
iconfile := filepath.Join(b.getPackageFileBaseDir(), "icon.png")
|
iconfile := filepath.Join(b.getPackageFileBaseDir(), "icon.png")
|
||||||
iconData, err := os.ReadFile(iconfile)
|
iconData, err := ioutil.ReadFile(iconfile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
err = os.WriteFile(srcIcon, iconData, 0644)
|
err = ioutil.WriteFile(srcIcon, iconData, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package cmd
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -150,7 +150,6 @@ type ProjectOptions struct {
|
|||||||
Template string `json:"-"`
|
Template string `json:"-"`
|
||||||
BinaryName string `json:"binaryname"`
|
BinaryName string `json:"binaryname"`
|
||||||
FrontEnd *frontend `json:"frontend,omitempty"`
|
FrontEnd *frontend `json:"frontend,omitempty"`
|
||||||
Tags string `json:"tags"`
|
|
||||||
NPMProjectName string `json:"-"`
|
NPMProjectName string `json:"-"`
|
||||||
system *SystemHelper
|
system *SystemHelper
|
||||||
log *Logger
|
log *Logger
|
||||||
@@ -163,25 +162,6 @@ type ProjectOptions struct {
|
|||||||
Platform string
|
Platform string
|
||||||
Architecture string
|
Architecture string
|
||||||
LdFlags string
|
LdFlags string
|
||||||
GoPath string
|
|
||||||
UseFirebug bool
|
|
||||||
|
|
||||||
// Supported platforms
|
|
||||||
Platforms []string `json:"platforms,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// PlatformSupported returns true if the template is supported
|
|
||||||
// on the current platform
|
|
||||||
func (po *ProjectOptions) PlatformSupported() bool {
|
|
||||||
|
|
||||||
// Default is all platforms supported
|
|
||||||
if len(po.Platforms) == 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check that the platform is in the list
|
|
||||||
platformsSupported := slicer.String(po.Platforms)
|
|
||||||
return platformsSupported.Contains(runtime.GOOS)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Defaults sets the default project template
|
// Defaults sets the default project template
|
||||||
@@ -252,16 +232,13 @@ func (po *ProjectOptions) PromptForInputs() error {
|
|||||||
for _, k := range keys {
|
for _, k := range keys {
|
||||||
templateDetail := templateDetails[k]
|
templateDetail := templateDetails[k]
|
||||||
templateList.Add(templateDetail)
|
templateList.Add(templateDetail)
|
||||||
if !templateDetail.Metadata.PlatformSupported() {
|
|
||||||
templateDetail.Metadata.Name = "* " + templateDetail.Metadata.Name
|
|
||||||
}
|
|
||||||
options.Add(fmt.Sprintf("%s - %s", templateDetail.Metadata.Name, templateDetail.Metadata.ShortDescription))
|
options.Add(fmt.Sprintf("%s - %s", templateDetail.Metadata.Name, templateDetail.Metadata.ShortDescription))
|
||||||
}
|
}
|
||||||
|
|
||||||
templateIndex := 0
|
templateIndex := 0
|
||||||
|
|
||||||
if len(options.AsSlice()) > 1 {
|
if len(options.AsSlice()) > 1 {
|
||||||
templateIndex = PromptSelection("Please select a template (* means unsupported on current platform)", options.AsSlice(), 0)
|
templateIndex = PromptSelection("Please select a template", options.AsSlice(), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(templateList.AsSlice()) == 0 {
|
if len(templateList.AsSlice()) == 0 {
|
||||||
@@ -272,10 +249,6 @@ func (po *ProjectOptions) PromptForInputs() error {
|
|||||||
po.selectedTemplate = templateList.AsSlice()[templateIndex].(*TemplateDetails)
|
po.selectedTemplate = templateList.AsSlice()[templateIndex].(*TemplateDetails)
|
||||||
}
|
}
|
||||||
|
|
||||||
po.selectedTemplate.Metadata.Name = strings.TrimPrefix(po.selectedTemplate.Metadata.Name, "* ")
|
|
||||||
if !po.selectedTemplate.Metadata.PlatformSupported() {
|
|
||||||
println("WARNING: This template is unsupported on this platform!")
|
|
||||||
}
|
|
||||||
fmt.Println("Template: " + po.selectedTemplate.Metadata.Name)
|
fmt.Println("Template: " + po.selectedTemplate.Metadata.Name)
|
||||||
|
|
||||||
// Setup NPM Project name
|
// Setup NPM Project name
|
||||||
@@ -309,14 +282,14 @@ func (po *ProjectOptions) WriteProjectConfig() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return os.WriteFile(targetFile, filedata, 0600)
|
return ioutil.WriteFile(targetFile, filedata, 0600)
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadConfig loads the project configuration file from the
|
// LoadConfig loads the project configuration file from the
|
||||||
// given directory
|
// given directory
|
||||||
func (po *ProjectOptions) LoadConfig(projectDir string) error {
|
func (po *ProjectOptions) LoadConfig(projectDir string) error {
|
||||||
targetFile := filepath.Join(projectDir, "project.json")
|
targetFile := filepath.Join(projectDir, "project.json")
|
||||||
rawBytes, err := os.ReadFile(targetFile)
|
rawBytes, err := ioutil.ReadFile(targetFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -398,9 +371,5 @@ func processTemplateMetadata(templateMetadata *TemplateMetadata, po *ProjectOpti
|
|||||||
}
|
}
|
||||||
po.FrontEnd.Serve = templateMetadata.Serve
|
po.FrontEnd.Serve = templateMetadata.Serve
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save platforms
|
|
||||||
po.Platforms = templateMetadata.Platforms
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,19 +24,11 @@ func NewSemanticVersion(version string) (*SemanticVersion, error) {
|
|||||||
|
|
||||||
// IsRelease returns true if it's a release version
|
// IsRelease returns true if it's a release version
|
||||||
func (s *SemanticVersion) IsRelease() bool {
|
func (s *SemanticVersion) IsRelease() bool {
|
||||||
// Limit to v1
|
|
||||||
if s.Version.Major() != 1 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return len(s.Version.Prerelease()) == 0 && len(s.Version.Metadata()) == 0
|
return len(s.Version.Prerelease()) == 0 && len(s.Version.Metadata()) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsPreRelease returns true if it's a prerelease version
|
// IsPreRelease returns true if it's a prerelease version
|
||||||
func (s *SemanticVersion) IsPreRelease() bool {
|
func (s *SemanticVersion) IsPreRelease() bool {
|
||||||
// Limit to v1
|
|
||||||
if s.Version.Major() != 1 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return len(s.Version.Prerelease()) > 0
|
return len(s.Version.Prerelease()) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
package cmd
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestSemanticVersion_IsPreRelease(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
version string
|
|
||||||
want bool
|
|
||||||
}{
|
|
||||||
{"v1.6.7-pre0", "v1.6.7-pre0", true},
|
|
||||||
{"v2.6.7+pre0", "v2.6.7+pre0", false},
|
|
||||||
{"v2.6.7", "v2.6.7", false},
|
|
||||||
{"v2.0.0+alpha.1", "v2.0.0+alpha.1", false},
|
|
||||||
{"v2.0.0-alpha.1", "v2.0.0-alpha.1", false},
|
|
||||||
{"v1.6.7", "v1.6.7", false},
|
|
||||||
}
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
semanticversion, err := NewSemanticVersion(tt.version)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("Invalid semantic version: %s", semanticversion)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
s := &SemanticVersion{
|
|
||||||
Version: semanticversion.Version,
|
|
||||||
}
|
|
||||||
if got := s.IsPreRelease(); got != tt.want {
|
|
||||||
t.Errorf("IsPreRelease() = %v, want %v", got, tt.want)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSemanticVersion_IsRelease(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
version string
|
|
||||||
want bool
|
|
||||||
}{
|
|
||||||
{"v1.6.7", "v1.6.7", true},
|
|
||||||
{"v2.6.7-pre0", "v2.6.7-pre0", false},
|
|
||||||
{"v2.6.7", "v2.6.7", false},
|
|
||||||
{"v2.6.7+release", "v2.6.7+release", false},
|
|
||||||
{"v2.0.0-alpha.1", "v2.0.0-alpha.1", false},
|
|
||||||
{"v1.6.7-pre0", "v1.6.7-pre0", false},
|
|
||||||
}
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
semanticversion, err := NewSemanticVersion(tt.version)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("Invalid semantic version: %s", semanticversion)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
s := &SemanticVersion{
|
|
||||||
Version: semanticversion.Version,
|
|
||||||
}
|
|
||||||
if got := s.IsRelease(); got != tt.want {
|
|
||||||
t.Errorf("IsRelease() = %v, want %v", got, tt.want)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -3,6 +3,7 @@ package cmd
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -98,16 +99,11 @@ func (s *SystemHelper) setup() error {
|
|||||||
|
|
||||||
if config.Name != "" {
|
if config.Name != "" {
|
||||||
systemConfig["name"] = PromptRequired("What is your name", config.Name)
|
systemConfig["name"] = PromptRequired("What is your name", config.Name)
|
||||||
} else if n, err := getGitConfigValue("user.name"); err == nil && n != "" {
|
|
||||||
systemConfig["name"] = PromptRequired("What is your name", n)
|
|
||||||
} else {
|
} else {
|
||||||
systemConfig["name"] = PromptRequired("What is your name")
|
systemConfig["name"] = PromptRequired("What is your name")
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.Email != "" {
|
if config.Email != "" {
|
||||||
systemConfig["email"] = PromptRequired("What is your email address", config.Email)
|
systemConfig["email"] = PromptRequired("What is your email address", config.Email)
|
||||||
} else if e, err := getGitConfigValue("user.email"); err == nil && e != "" {
|
|
||||||
systemConfig["email"] = PromptRequired("What is your email address", e)
|
|
||||||
} else {
|
} else {
|
||||||
systemConfig["email"] = PromptRequired("What is your email address")
|
systemConfig["email"] = PromptRequired("What is your email address")
|
||||||
}
|
}
|
||||||
@@ -123,7 +119,7 @@ func (s *SystemHelper) setup() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = os.WriteFile(s.wailsSystemConfig, configData, 0755)
|
err = ioutil.WriteFile(s.wailsSystemConfig, configData, 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -184,7 +180,7 @@ func (s *SystemHelper) Initialise() error {
|
|||||||
return s.setup()
|
return s.setup()
|
||||||
}
|
}
|
||||||
|
|
||||||
// SystemConfig - Defines system wide configuration data
|
// SystemConfig - Defines system wode configuration data
|
||||||
type SystemConfig struct {
|
type SystemConfig struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
@@ -206,11 +202,11 @@ func (sc *SystemConfig) Save(filename string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Write it out to the config file
|
// Write it out to the config file
|
||||||
return os.WriteFile(filename, theJSON, 0644)
|
return ioutil.WriteFile(filename, theJSON, 0644)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sc *SystemConfig) load(filename string) error {
|
func (sc *SystemConfig) load(filename string) error {
|
||||||
configData, err := os.ReadFile(filename)
|
configData, err := ioutil.ReadFile(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -280,9 +276,9 @@ func CheckDependencies(logger *Logger) (bool, error) {
|
|||||||
switch distroInfo.Distribution {
|
switch distroInfo.Distribution {
|
||||||
case Ubuntu, Debian, Zorin, Parrot, Linuxmint, Elementary, Kali, Neon, Deepin, Raspbian, PopOS:
|
case Ubuntu, Debian, Zorin, Parrot, Linuxmint, Elementary, Kali, Neon, Deepin, Raspbian, PopOS:
|
||||||
libraryChecker = DpkgInstalled
|
libraryChecker = DpkgInstalled
|
||||||
case Arch, ArcoLinux, ArchLabs, Ctlos, Manjaro, ManjaroARM, EndeavourOS, ArtixLinux:
|
case Arch, ArcoLinux, ArchLabs, Manjaro, ManjaroARM:
|
||||||
libraryChecker = PacmanInstalled
|
libraryChecker = PacmanInstalled
|
||||||
case CentOS, Fedora, Tumbleweed, Leap, RHEL:
|
case CentOS, Fedora, Tumbleweed, Leap:
|
||||||
libraryChecker = RpmInstalled
|
libraryChecker = RpmInstalled
|
||||||
case Gentoo:
|
case Gentoo:
|
||||||
libraryChecker = EqueryInstalled
|
libraryChecker = EqueryInstalled
|
||||||
@@ -290,10 +286,6 @@ func CheckDependencies(logger *Logger) (bool, error) {
|
|||||||
libraryChecker = XbpsInstalled
|
libraryChecker = XbpsInstalled
|
||||||
case Solus:
|
case Solus:
|
||||||
libraryChecker = EOpkgInstalled
|
libraryChecker = EOpkgInstalled
|
||||||
case Crux:
|
|
||||||
libraryChecker = PrtGetInstalled
|
|
||||||
case NixOS:
|
|
||||||
libraryChecker = NixEnvInstalled
|
|
||||||
default:
|
default:
|
||||||
return false, RequestSupportForDistribution(distroInfo)
|
return false, RequestSupportForDistribution(distroInfo)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,9 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
|
||||||
"strings"
|
"strings"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
@@ -30,26 +29,6 @@ type TemplateMetadata struct {
|
|||||||
Bridge string `json:"bridge"`
|
Bridge string `json:"bridge"`
|
||||||
WailsDir string `json:"wailsdir"`
|
WailsDir string `json:"wailsdir"`
|
||||||
TemplateDependencies []*TemplateDependency `json:"dependencies,omitempty"`
|
TemplateDependencies []*TemplateDependency `json:"dependencies,omitempty"`
|
||||||
|
|
||||||
// List of platforms that this template is supported on.
|
|
||||||
// No value means all platforms. A platform name is the same string
|
|
||||||
// as `runtime.GOOS` will return, eg: "darwin". NOTE: This is
|
|
||||||
// case sensitive.
|
|
||||||
Platforms []string `json:"platforms,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// PlatformSupported returns true if this template supports the
|
|
||||||
// currently running platform
|
|
||||||
func (m *TemplateMetadata) PlatformSupported() bool {
|
|
||||||
|
|
||||||
// Default is all platforms supported
|
|
||||||
if len(m.Platforms) == 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check that the platform is in the list
|
|
||||||
platformsSupported := slicer.String(m.Platforms)
|
|
||||||
return platformsSupported.Contains(runtime.GOOS)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TemplateDependency defines a binary dependency for the template
|
// TemplateDependency defines a binary dependency for the template
|
||||||
@@ -125,7 +104,7 @@ func (t *TemplateHelper) LoadMetadata(dir string) (*TemplateMetadata, error) {
|
|||||||
if !t.fs.FileExists(templateFile) {
|
if !t.fs.FileExists(templateFile) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
rawJSON, err := os.ReadFile(templateFile)
|
rawJSON, err := ioutil.ReadFile(templateFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -149,11 +128,11 @@ func (t *TemplateHelper) GetTemplateDetails() (map[string]*TemplateDetails, erro
|
|||||||
result[name] = &TemplateDetails{
|
result[name] = &TemplateDetails{
|
||||||
Path: dir,
|
Path: dir,
|
||||||
}
|
}
|
||||||
|
_ = &TemplateMetadata{}
|
||||||
metadata, err := t.LoadMetadata(dir)
|
metadata, err := t.LoadMetadata(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
result[name].Metadata = metadata
|
result[name].Metadata = metadata
|
||||||
if metadata.Name != "" {
|
if metadata.Name != "" {
|
||||||
result[name].Name = metadata.Name
|
result[name].Name = metadata.Name
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"ng": "npx ng",
|
"ng": "npx ng",
|
||||||
"serve": "npx ng serve --poll=2000 --host=0.0.0.0",
|
"start": "npx ng serve --poll=2000 --host=0.0.0.0",
|
||||||
"build": "npx ng build --single-bundle true --output-hashing none --prod --bundle-styles false",
|
"build": "npx ng build --single-bundle true --output-hashing none --prod --bundle-styles false",
|
||||||
"test": "npx ng test",
|
"test": "npx ng test",
|
||||||
"lint": "npx ng lint",
|
"lint": "npx ng lint",
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ const routes: Routes = [];
|
|||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
RouterModule.forRoot(routes,{useHash:true})
|
RouterModule.forRoot(routes)
|
||||||
],
|
],
|
||||||
exports: [RouterModule]
|
exports: [RouterModule]
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "embed"
|
"github.com/leaanthony/mewn"
|
||||||
"github.com/wailsapp/wails"
|
"github.com/wailsapp/wails"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -9,14 +9,11 @@ func basic() string {
|
|||||||
return "World!"
|
return "World!"
|
||||||
}
|
}
|
||||||
|
|
||||||
//go:embed frontend/dist/my-app/main.js
|
|
||||||
var js string
|
|
||||||
|
|
||||||
//go:embed frontend/dist/my-app/styles.css
|
|
||||||
var css string
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
|
js := mewn.String("./frontend/dist/my-app/main.js")
|
||||||
|
css := mewn.String("./frontend/dist/my-app/styles.css")
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
app := wails.CreateApp(&wails.AppConfig{
|
||||||
Width: 1024,
|
Width: 1024,
|
||||||
Height: 768,
|
Height: 768,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"author": "bh90210 <ktc@pm.me>",
|
"author": "bh90210 <ktc@pm.me>",
|
||||||
"created": "2019-06-15 18:23:48.666414555 +0300 EEST m=+223.934866008",
|
"created": "2019-06-15 18:23:48.666414555 +0300 EEST m=+223.934866008",
|
||||||
"frontenddir": "frontend",
|
"frontenddir": "frontend",
|
||||||
"serve": "npm run serve",
|
"serve": "npx ng serve --poll=2000",
|
||||||
"bridge": "src",
|
"bridge": "src",
|
||||||
"wailsdir": ""
|
"wailsdir": ""
|
||||||
}
|
}
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
"@wailsapp/runtime": "^1.0.10"
|
"@wailsapp/runtime": "^1.0.10"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"serve": "react-scripts start",
|
"start": "react-scripts start",
|
||||||
"build": "react-scripts build",
|
"build": "react-scripts build",
|
||||||
"test": "react-scripts test",
|
"test": "react-scripts test",
|
||||||
"eject": "react-scripts eject"
|
"eject": "react-scripts eject"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "embed"
|
"github.com/leaanthony/mewn"
|
||||||
"github.com/wailsapp/wails"
|
"github.com/wailsapp/wails"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -9,14 +9,11 @@ func basic() string {
|
|||||||
return "World!"
|
return "World!"
|
||||||
}
|
}
|
||||||
|
|
||||||
//go:embed frontend/build/static/js/main.js
|
|
||||||
var js string
|
|
||||||
|
|
||||||
//go:embed frontend/build/static/css/main.css
|
|
||||||
var css string
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
|
js := mewn.String("./frontend/build/static/js/main.js")
|
||||||
|
css := mewn.String("./frontend/build/static/css/main.css")
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
app := wails.CreateApp(&wails.AppConfig{
|
||||||
Width: 1024,
|
Width: 1024,
|
||||||
Height: 768,
|
Height: 768,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
"author": "bh90210 <ktc@pm.me>",
|
"author": "bh90210 <ktc@pm.me>",
|
||||||
"created": "2019-06-07 18:23:48.666414555 +0300 EEST m=+223.934866008",
|
"created": "2019-06-07 18:23:48.666414555 +0300 EEST m=+223.934866008",
|
||||||
"frontenddir": "frontend",
|
"frontenddir": "frontend",
|
||||||
"serve": "npm run serve",
|
"serve": "npm run start",
|
||||||
"bridge": "src",
|
"bridge": "src",
|
||||||
"wailsdir": ""
|
"wailsdir": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "{{.NPMProjectName}}",
|
|
||||||
"author": "{{.Author.Name}}<{{.Author.Email}}>",
|
|
||||||
"scripts": {
|
|
||||||
"build": "rollup -c",
|
|
||||||
"serve": "rollup -c -w",
|
|
||||||
"start": "sirv public"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@babel/core": "^7.11.6",
|
|
||||||
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
|
||||||
"@babel/plugin-transform-runtime": "^7.11.5",
|
|
||||||
"@babel/preset-env": "^7.11.5",
|
|
||||||
"@rollup/plugin-commonjs": "^14.0.0",
|
|
||||||
"@rollup/plugin-image": "^2.0.5",
|
|
||||||
"@rollup/plugin-node-resolve": "^8.0.0",
|
|
||||||
"core-js": "^3.6.5",
|
|
||||||
"rollup": "^2.3.4",
|
|
||||||
"rollup-plugin-babel": "^4.4.0",
|
|
||||||
"rollup-plugin-livereload": "^2.0.0",
|
|
||||||
"rollup-plugin-polyfill": "^3.0.0",
|
|
||||||
"rollup-plugin-svelte": "^6.0.0",
|
|
||||||
"rollup-plugin-terser": "^7.0.0",
|
|
||||||
"svelte": "^3.0.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"sirv-cli": "^1.0.0",
|
|
||||||
"@wailsapp/runtime": "^1.0.10",
|
|
||||||
"svelte-simple-modal": "^0.6.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 3.1 KiB |
@@ -1,17 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset='utf-8'>
|
|
||||||
<meta name='viewport' content='width=device-width,initial-scale=1'>
|
|
||||||
|
|
||||||
<title>Svelte app</title>
|
|
||||||
|
|
||||||
<link rel='icon' type='image/png' href='/favicon.png'>
|
|
||||||
<link rel='stylesheet' href='/build/bundle.css'>
|
|
||||||
|
|
||||||
<script defer src='/build/bundle.js'></script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import Modal from 'svelte-simple-modal';
|
|
||||||
import HelloWorld from './components/HelloWorld.svelte'
|
|
||||||
import logo from './logo.png';
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<main>
|
|
||||||
<div class="App">
|
|
||||||
<header class="App-header">
|
|
||||||
<Modal>
|
|
||||||
<img src={logo} class="App-logo" alt="logo" />
|
|
||||||
<p>Welcome to your new <code>wails/svelte</code> project.</p>
|
|
||||||
<HelloWorld/>
|
|
||||||
</Modal>
|
|
||||||
</header>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
:global(body) {
|
|
||||||
margin: 0;
|
|
||||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
|
|
||||||
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
|
|
||||||
sans-serif;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
.App {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.App-logo {
|
|
||||||
height: 40vmin;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
|
||||||
.App-logo {
|
|
||||||
animation: App-logo-spin infinite 20s linear;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.App-header {
|
|
||||||
background-color: #282c34;
|
|
||||||
min-height: 100vh;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-size: calc(10px + 2vmin);
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes App-logo-spin {
|
|
||||||
from {
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
to {
|
|
||||||
transform: rotate(360deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<script>
|
|
||||||
import { getContext } from 'svelte';
|
|
||||||
import ModalContent from './ModalContent.svelte'
|
|
||||||
|
|
||||||
const { open } = getContext('simple-modal');
|
|
||||||
|
|
||||||
const handleOpenModal = () => {
|
|
||||||
window.backend.basic().then((result) => {
|
|
||||||
open(ModalContent, { message: result });
|
|
||||||
});
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<main>
|
|
||||||
<p><button on:click={handleOpenModal}>Hello</button></p>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<style></style>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<script>
|
|
||||||
export let message;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
{message}
|
|
||||||
</p>
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
import App from './App.svelte';
|
|
||||||
|
|
||||||
import * as Wails from '@wailsapp/runtime';
|
|
||||||
|
|
||||||
let app;
|
|
||||||
|
|
||||||
Wails.Init(() => {
|
|
||||||
app = new App({
|
|
||||||
target: document.body,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
export default app;
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
module {{.BinaryName}}
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/wailsapp/wails {{.WailsVersion}}
|
|
||||||
)
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
_ "embed"
|
|
||||||
"github.com/wailsapp/wails"
|
|
||||||
)
|
|
||||||
|
|
||||||
func basic() string {
|
|
||||||
return "World!"
|
|
||||||
}
|
|
||||||
|
|
||||||
//go:embed frontend/public/build/bundle.js
|
|
||||||
var js string
|
|
||||||
|
|
||||||
//go:embed frontend/public/build/bundle.css
|
|
||||||
var css string
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
|
||||||
Width: 1024,
|
|
||||||
Height: 768,
|
|
||||||
Title: "{{.Name}}",
|
|
||||||
JS: js,
|
|
||||||
CSS: css,
|
|
||||||
Colour: "#131313",
|
|
||||||
})
|
|
||||||
|
|
||||||
app.Bind(basic)
|
|
||||||
app.Run()
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Svelte",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"shortdescription": "A basic Svelte template",
|
|
||||||
"description": "A basic Svelte template",
|
|
||||||
"install": "npm install",
|
|
||||||
"build": "npm run build",
|
|
||||||
"author": "Tim Kipp <timkipp.22.developer@gmail.com>",
|
|
||||||
"created": "2020-09-06 13:06:10.469848 -0700 PDT m=+213.578828559",
|
|
||||||
"frontenddir": "frontend",
|
|
||||||
"serve": "npm run serve",
|
|
||||||
"bridge": "src",
|
|
||||||
"wailsdir": ""
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"math/rand"
|
|
||||||
|
|
||||||
"github.com/wailsapp/wails"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Counter is what we use for counting
|
|
||||||
type Counter struct {
|
|
||||||
r *wails.Runtime
|
|
||||||
store *wails.Store
|
|
||||||
}
|
|
||||||
|
|
||||||
// WailsInit is called when the component is being initialised
|
|
||||||
func (c *Counter) WailsInit(runtime *wails.Runtime) error {
|
|
||||||
c.r = runtime
|
|
||||||
c.store = runtime.Store.New("Counter", 0)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// RandomValue sets the counter to a random value
|
|
||||||
func (c *Counter) RandomValue() {
|
|
||||||
c.store.Set(rand.Intn(1000))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Increment will increment the counter
|
|
||||||
func (c *Counter) Increment() {
|
|
||||||
|
|
||||||
increment := func(data int) int {
|
|
||||||
return data + 1
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update the store using the increment function
|
|
||||||
c.store.Update(increment)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decrement will decrement the counter
|
|
||||||
func (c *Counter) Decrement() {
|
|
||||||
|
|
||||||
decrement := func(data int) int {
|
|
||||||
return data - 1
|
|
||||||
}
|
|
||||||
// Update the store using the decrement function
|
|
||||||
c.store.Update(decrement)
|
|
||||||
}
|
|
||||||
@@ -2,35 +2,20 @@
|
|||||||
html,
|
html,
|
||||||
body {
|
body {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
color: black;
|
width: 1024px;
|
||||||
width: 100%;
|
height: 768px;
|
||||||
height: 100%;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
input {
|
|
||||||
background-color: rgb(254,254,254);
|
|
||||||
color: black;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
display: block;
|
display: block;
|
||||||
width:100%;
|
width:100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 1rem;
|
margin-top: 3rem;
|
||||||
font-size: 2rem;
|
font-size: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
button {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
background-color: white;
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
.result {
|
|
||||||
margin-top: 1rem;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.logo {
|
.logo {
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ const runtime = require('@wailsapp/runtime');
|
|||||||
// Main entry point
|
// Main entry point
|
||||||
function start() {
|
function start() {
|
||||||
|
|
||||||
var mystore = runtime.Store.New('Counter');
|
|
||||||
|
|
||||||
// Ensure the default app div is 100% wide/high
|
// Ensure the default app div is 100% wide/high
|
||||||
var app = document.getElementById('app');
|
var app = document.getElementById('app');
|
||||||
app.style.width = '100%';
|
app.style.width = '100%';
|
||||||
@@ -15,32 +13,17 @@ function start() {
|
|||||||
app.innerHTML = `
|
app.innerHTML = `
|
||||||
<div class='logo'></div>
|
<div class='logo'></div>
|
||||||
<div class='container'>
|
<div class='container'>
|
||||||
<button onClick='window.backend.Counter.Increment()'>
|
<button id='button'>Click Me!</button>
|
||||||
Increment Counter
|
<div id='result'/>
|
||||||
</button>
|
|
||||||
<button onClick='window.backend.Counter.Decrement()'>
|
|
||||||
Decrement Counter
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class='result'>Counter: <span id='counter'></span></div>
|
|
||||||
<div class='container'>
|
|
||||||
<input id='newCounter' type="number" value="0"/>
|
|
||||||
<button id='setvalue'>Set Counter Value</button>
|
|
||||||
<button onclick='window.backend.Counter.RandomValue()'>Set to Random Value</button>
|
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
// Connect counter value button to Go method
|
// Connect button to Go method
|
||||||
document.getElementById('setvalue').onclick = function() {
|
document.getElementById('button').onclick = function() {
|
||||||
let newValue = parseInt(document.getElementById('newCounter').value,10);
|
window.backend.basic().then( function(result) {
|
||||||
mystore.set(newValue);
|
document.getElementById('result').innerText = result;
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
mystore.subscribe( function(state) {
|
|
||||||
document.getElementById('counter').innerText = state;
|
|
||||||
});
|
|
||||||
|
|
||||||
mystore.set(0);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// We provide our entrypoint as a callback for runtime.Init
|
// We provide our entrypoint as a callback for runtime.Init
|
||||||
|
|||||||
@@ -1,18 +1,19 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "embed"
|
"github.com/leaanthony/mewn"
|
||||||
"github.com/wailsapp/wails"
|
"github.com/wailsapp/wails"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed frontend/build/main.js
|
func basic() string {
|
||||||
var js string
|
return "Hello World!"
|
||||||
|
}
|
||||||
//go:embed frontend/build/main.css
|
|
||||||
var css string
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
|
js := mewn.String("./frontend/build/main.js")
|
||||||
|
css := mewn.String("./frontend/build/main.css")
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
app := wails.CreateApp(&wails.AppConfig{
|
||||||
Width: 1024,
|
Width: 1024,
|
||||||
Height: 768,
|
Height: 768,
|
||||||
@@ -21,6 +22,6 @@ func main() {
|
|||||||
CSS: css,
|
CSS: css,
|
||||||
Colour: "#131313",
|
Colour: "#131313",
|
||||||
})
|
})
|
||||||
app.Bind(&Counter{})
|
app.Bind(basic)
|
||||||
app.Run()
|
app.Run()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
> 1%
|
|
||||||
last 2 versions
|
|
||||||
not dead
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
root: true,
|
|
||||||
env: {
|
|
||||||
node: true
|
|
||||||
},
|
|
||||||
'extends': [
|
|
||||||
'plugin:vue/vue3-essential',
|
|
||||||
'eslint:recommended',
|
|
||||||
'@vue/typescript/recommended'
|
|
||||||
],
|
|
||||||
parserOptions: {
|
|
||||||
ecmaVersion: 2020
|
|
||||||
},
|
|
||||||
rules: {
|
|
||||||
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
|
||||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
|
|
||||||
},
|
|
||||||
overrides: [
|
|
||||||
{
|
|
||||||
files: [
|
|
||||||
'**/__tests__/*.{j,t}s?(x)',
|
|
||||||
'**/tests/unit/**/*.spec.{j,t}s?(x)'
|
|
||||||
],
|
|
||||||
env: {
|
|
||||||
mocha: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
21
cmd/templates/vue3-full/frontend/.gitignore
vendored
@@ -1,21 +0,0 @@
|
|||||||
.DS_Store
|
|
||||||
node_modules
|
|
||||||
/dist
|
|
||||||
|
|
||||||
# local env files
|
|
||||||
.env.local
|
|
||||||
.env.*.local
|
|
||||||
|
|
||||||
# Log files
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
|
|
||||||
# Editor directories and files
|
|
||||||
.idea
|
|
||||||
.vscode
|
|
||||||
*.suo
|
|
||||||
*.ntvs*
|
|
||||||
*.njsproj
|
|
||||||
*.sln
|
|
||||||
*.sw*
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
# vue basic
|
|
||||||
|
|
||||||
## Project setup
|
|
||||||
|
|
||||||
```
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### Compiles and hot-reloads for development
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run serve
|
|
||||||
```
|
|
||||||
|
|
||||||
### Compiles and minifies for production
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run your tests
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run test
|
|
||||||
```
|
|
||||||
|
|
||||||
### Lints and fixes files
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run lint
|
|
||||||
```
|
|
||||||
|
|
||||||
### Customize configuration
|
|
||||||
|
|
||||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "{{.NPMProjectName}}",
|
|
||||||
"author": "{{.Author.Name}}<{{.Author.Email}}>",
|
|
||||||
"private": true,
|
|
||||||
"scripts": {
|
|
||||||
"serve": "vue-cli-service serve",
|
|
||||||
"build": "vue-cli-service build",
|
|
||||||
"test:unit": "vue-cli-service test:unit",
|
|
||||||
"lint": "vue-cli-service lint"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"vue": "^3.0.0-0",
|
|
||||||
"vue-router": "^4.0.0-0",
|
|
||||||
"regenerator-runtime": "^0.13.7",
|
|
||||||
"@wailsapp/runtime": "^1.1.1"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/chai": "^4.2.12",
|
|
||||||
"@types/mocha": "^8.0.3",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^4.3.0",
|
|
||||||
"@typescript-eslint/parser": "^4.3.0",
|
|
||||||
"@vue/cli-plugin-eslint": "~4.5.9",
|
|
||||||
"@vue/cli-plugin-router": "~4.5.9",
|
|
||||||
"@vue/cli-plugin-typescript": "~4.5.9",
|
|
||||||
"@vue/cli-plugin-unit-mocha": "~4.5.9",
|
|
||||||
"@vue/cli-service": "~4.5.9",
|
|
||||||
"@vue/compiler-sfc": "^3.0.0",
|
|
||||||
"@vue/eslint-config-typescript": "^7.0.0",
|
|
||||||
"@vue/test-utils": "^2.0.0-0",
|
|
||||||
"chai": "^4.2.0",
|
|
||||||
"eslint": "<7.0.0",
|
|
||||||
"eslint-plugin-vue": "^7.0.0",
|
|
||||||
"node-sass": "^4.14.1",
|
|
||||||
"sass-loader": "^10.0.2",
|
|
||||||
"typescript": "~4.0.3"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div id=app>
|
|
||||||
<div id="nav">
|
|
||||||
<router-link to="/">Home</router-link> |
|
|
||||||
<router-link to="/about">About</router-link>
|
|
||||||
</div>
|
|
||||||
<router-view/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
#app {
|
|
||||||
font-family: Avenir, Helvetica, Arial, sans-serif;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
text-align: center;
|
|
||||||
color: #2c3e50;
|
|
||||||
}
|
|
||||||
|
|
||||||
#nav {
|
|
||||||
padding: 30px;
|
|
||||||
|
|
||||||
a {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #2c3e50;
|
|
||||||
|
|
||||||
&.router-link-exact-active {
|
|
||||||
color: #42b983;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
Before Width: | Height: | Size: 106 KiB |
@@ -1,34 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="hello">
|
|
||||||
<h1>{{ msg }}</h1>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { defineComponent } from 'vue';
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
name: 'HelloWorld',
|
|
||||||
props: {
|
|
||||||
msg: String,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
|
||||||
<style scoped lang="scss">
|
|
||||||
h3 {
|
|
||||||
margin: 40px 0 0;
|
|
||||||
}
|
|
||||||
ul {
|
|
||||||
list-style-type: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
li {
|
|
||||||
display: inline-block;
|
|
||||||
margin: 0 10px;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: #42b983;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
import { createApp } from 'vue';
|
|
||||||
import App from './App.vue';
|
|
||||||
import router from './router';
|
|
||||||
import * as Wails from '@wailsapp/runtime';
|
|
||||||
|
|
||||||
Wails.Init(() => {
|
|
||||||
createApp(App).use(router).mount('#app');
|
|
||||||
});
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
import { createRouter, createMemoryHistory, RouteRecordRaw } from 'vue-router'
|
|
||||||
import Home from '../views/Home.vue'
|
|
||||||
import About from '../views/About.vue'
|
|
||||||
|
|
||||||
const routes: Array<RouteRecordRaw> = [
|
|
||||||
{
|
|
||||||
path: '/',
|
|
||||||
name: 'Home',
|
|
||||||
component: Home
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/about',
|
|
||||||
name: 'About',
|
|
||||||
// route level code-splitting
|
|
||||||
// this generates a separate chunk (about.[hash].js) for this route
|
|
||||||
// which is lazy-loaded when the route is visited.
|
|
||||||
// component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
|
|
||||||
component: About
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
const router = createRouter({
|
|
||||||
history: createMemoryHistory(),
|
|
||||||
routes
|
|
||||||
})
|
|
||||||
|
|
||||||
export default router
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
declare module '*.vue' {
|
|
||||||
import { defineComponent } from 'vue'
|
|
||||||
const component: ReturnType<typeof defineComponent>
|
|
||||||
export default component
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="about">
|
|
||||||
<h1>This is an about page</h1>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="home">
|
|
||||||
<img @click="getMessage" alt="Vue logo" src="../assets/appicon.png" :style="{ height: '400px' }"/>
|
|
||||||
<HelloWorld :msg="message" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { ref, defineComponent } from "vue";
|
|
||||||
import HelloWorld from "@/components/HelloWorld.vue"; // @ is an alias to /src
|
|
||||||
|
|
||||||
interface Backend {
|
|
||||||
basic(): Promise<string>;
|
|
||||||
}
|
|
||||||
|
|
||||||
declare global {
|
|
||||||
interface Window {
|
|
||||||
backend: Backend;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
name: "Home",
|
|
||||||
components: {
|
|
||||||
HelloWorld,
|
|
||||||
},
|
|
||||||
setup() {
|
|
||||||
|
|
||||||
const message = ref("Click the Icon");
|
|
||||||
|
|
||||||
const getMessage = () => {
|
|
||||||
window.backend.basic().then(result => {
|
|
||||||
message.value = result;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return { message: message, getMessage: getMessage };
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
import { expect } from 'chai';
|
|
||||||
import { describe, it } from 'mocha';
|
|
||||||
import { shallowMount } from '@vue/test-utils';
|
|
||||||
import HelloWorld from '@/components/HelloWorld.vue';
|
|
||||||
|
|
||||||
describe('HelloWorld.vue', () => {
|
|
||||||
it('renders props.msg when passed', () => {
|
|
||||||
const msg = 'new message';
|
|
||||||
const wrapper = shallowMount(HelloWorld, {
|
|
||||||
props: { msg }
|
|
||||||
});
|
|
||||||
expect(wrapper.text()).to.include(msg);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"target": "es5",
|
|
||||||
"module": "esnext",
|
|
||||||
"strict": true,
|
|
||||||
"jsx": "preserve",
|
|
||||||
"importHelpers": true,
|
|
||||||
"moduleResolution": "node",
|
|
||||||
"skipLibCheck": true,
|
|
||||||
"esModuleInterop": true,
|
|
||||||
"allowSyntheticDefaultImports": true,
|
|
||||||
"sourceMap": true,
|
|
||||||
"baseUrl": ".",
|
|
||||||
"types": [
|
|
||||||
"webpack-env",
|
|
||||||
"mocha",
|
|
||||||
"chai"
|
|
||||||
],
|
|
||||||
"paths": {
|
|
||||||
"@/*": [
|
|
||||||
"src/*"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"lib": [
|
|
||||||
"esnext",
|
|
||||||
"dom",
|
|
||||||
"dom.iterable",
|
|
||||||
"scripthost"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include": [
|
|
||||||
"src/**/*.ts",
|
|
||||||
"src/**/*.tsx",
|
|
||||||
"src/**/*.vue",
|
|
||||||
"tests/**/*.ts",
|
|
||||||
"tests/**/*.tsx"
|
|
||||||
],
|
|
||||||
"exclude": [
|
|
||||||
"node_modules"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
module {{.BinaryName}}
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/wailsapp/wails {{.WailsVersion}}
|
|
||||||
)
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
_ "embed"
|
|
||||||
"github.com/wailsapp/wails"
|
|
||||||
)
|
|
||||||
|
|
||||||
func basic() string {
|
|
||||||
return "Hello World!"
|
|
||||||
}
|
|
||||||
|
|
||||||
//go:embed frontend/dist/app.js
|
|
||||||
var js string
|
|
||||||
|
|
||||||
//go:embed frontend/dist/app.css
|
|
||||||
var css string
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
|
||||||
Width: 1024,
|
|
||||||
Height: 768,
|
|
||||||
Title: "{{.Name}}",
|
|
||||||
JS: js,
|
|
||||||
CSS: css,
|
|
||||||
Colour: "#131313",
|
|
||||||
})
|
|
||||||
app.Bind(basic)
|
|
||||||
app.Run()
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Vue3 Full",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"shortdescription": "Vue 3, Vuex, Vue-router, and Webpack4",
|
|
||||||
"description": "Vue3.0.0 Vuex, Vue-router, and Webpack 4",
|
|
||||||
"install": "npm install",
|
|
||||||
"build": "npm run build",
|
|
||||||
"author": "Kyle Muchmore <kmuchmor@gmail.com>",
|
|
||||||
"created": "2020-09-24 21:18:55.09417 +0000 UTC m=+90.125590001",
|
|
||||||
"frontenddir": "frontend",
|
|
||||||
"serve": "npm run serve",
|
|
||||||
"bridge": "src",
|
|
||||||
"wailsdir": "",
|
|
||||||
"platforms": ["linux", "darwin"]
|
|
||||||
}
|
|
||||||
23
cmd/templates/vue3-js/frontend/.gitignore
vendored
@@ -1,23 +0,0 @@
|
|||||||
.DS_Store
|
|
||||||
node_modules
|
|
||||||
/dist
|
|
||||||
|
|
||||||
|
|
||||||
# local env files
|
|
||||||
.env.local
|
|
||||||
.env.*.local
|
|
||||||
|
|
||||||
# Log files
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
pnpm-debug.log*
|
|
||||||
|
|
||||||
# Editor directories and files
|
|
||||||
.idea
|
|
||||||
.vscode
|
|
||||||
*.suo
|
|
||||||
*.ntvs*
|
|
||||||
*.njsproj
|
|
||||||
*.sln
|
|
||||||
*.sw?
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# vue-js
|
|
||||||
|
|
||||||
## Project setup
|
|
||||||
|
|
||||||
```
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### Compiles and hot-reloads for development
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run serve
|
|
||||||
```
|
|
||||||
|
|
||||||
### Compiles and minifies for production
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
### Lints and fixes files
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run lint
|
|
||||||
```
|
|
||||||
|
|
||||||
### Customize configuration
|
|
||||||
|
|
||||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
presets: [
|
|
||||||
'@vue/cli-plugin-babel/preset'
|
|
||||||
]
|
|
||||||
}
|
|
||||||
12312
cmd/templates/vue3-js/frontend/package-lock.json
generated
@@ -1,49 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "{{.NPMProjectName}}",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"private": true,
|
|
||||||
"scripts": {
|
|
||||||
"serve": "vue-cli-service serve",
|
|
||||||
"build": "vue-cli-service build",
|
|
||||||
"lint": "vue-cli-service lint"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@wailsapp/runtime": "^1.1.1",
|
|
||||||
"core-js": "^3.6.5",
|
|
||||||
"vue": "^3.0.0",
|
|
||||||
"vue-router": "^4.0.0-0",
|
|
||||||
"vuex": "^4.0.0-0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@vue/cli-plugin-babel": "~4.5.0",
|
|
||||||
"@vue/cli-plugin-eslint": "~4.5.0",
|
|
||||||
"@vue/cli-plugin-router": "~4.5.0",
|
|
||||||
"@vue/cli-plugin-vuex": "~4.5.0",
|
|
||||||
"@vue/cli-service": "~4.5.0",
|
|
||||||
"@vue/compiler-sfc": "^3.0.0",
|
|
||||||
"babel-eslint": "^10.1.0",
|
|
||||||
"eslint": "^6.7.2",
|
|
||||||
"eslint-plugin-vue": "^7.0.0",
|
|
||||||
"stylus": "^0.54.7",
|
|
||||||
"stylus-loader": "^3.0.2"
|
|
||||||
},
|
|
||||||
"eslintConfig": {
|
|
||||||
"root": true,
|
|
||||||
"env": {
|
|
||||||
"node": true
|
|
||||||
},
|
|
||||||
"extends": [
|
|
||||||
"plugin:vue/vue3-essential",
|
|
||||||
"eslint:recommended"
|
|
||||||
],
|
|
||||||
"parserOptions": {
|
|
||||||
"parser": "babel-eslint"
|
|
||||||
},
|
|
||||||
"rules": {}
|
|
||||||
},
|
|
||||||
"browserslist": [
|
|
||||||
"> 1%",
|
|
||||||
"last 2 versions",
|
|
||||||
"not dead"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 4.2 KiB |
@@ -1,18 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta content="IE=edge" http-equiv="X-UA-Compatible">
|
|
||||||
<meta content="width=device-width,initial-scale=1.0" name="viewport">
|
|
||||||
<link href="<%= BASE_URL %>favicon.ico" rel="icon">
|
|
||||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<noscript>
|
|
||||||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
|
|
||||||
Please enable it to continue.</strong>
|
|
||||||
</noscript>
|
|
||||||
<div id="app"></div>
|
|
||||||
<!-- built files will be auto injected -->
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div id="nav">
|
|
||||||
<router-link to="/">Home</router-link> |
|
|
||||||
<router-link to="/about">About</router-link>
|
|
||||||
</div>
|
|
||||||
<router-view />
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="stylus">
|
|
||||||
#app {
|
|
||||||
font-family: Avenir, Helvetica, Arial, sans-serif;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
text-align: center;
|
|
||||||
color: #2c3e50;
|
|
||||||
}
|
|
||||||
|
|
||||||
#nav {
|
|
||||||
padding: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#nav a {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #2c3e50;
|
|
||||||
}
|
|
||||||
|
|
||||||
#nav a.router-link-exact-active {
|
|
||||||
color: #42b983;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
Before Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 6.7 KiB |
@@ -1,32 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="hello">
|
|
||||||
<h1>{{ msg }}</h1>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: "HelloWorld",
|
|
||||||
props: {
|
|
||||||
msg: String,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
|
||||||
<style scoped>
|
|
||||||
h3 {
|
|
||||||
margin: 40px 0 0;
|
|
||||||
}
|
|
||||||
ul {
|
|
||||||
list-style-type: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
li {
|
|
||||||
display: inline-block;
|
|
||||||
margin: 0 10px;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: #42b983;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
import {createApp} from 'vue'
|
|
||||||
import App from './App.vue'
|
|
||||||
import router from './router'
|
|
||||||
import store from './store'
|
|
||||||
|
|
||||||
// import wails runtime
|
|
||||||
import * as Wails from '@wailsapp/runtime';
|
|
||||||
|
|
||||||
Wails.Init(() => {
|
|
||||||
createApp(App)
|
|
||||||
.use(store)
|
|
||||||
.use(router)
|
|
||||||
.mount('#app')
|
|
||||||
})
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
import {createMemoryHistory, createRouter} from 'vue-router'
|
|
||||||
import Home from '../views/Home.vue'
|
|
||||||
import About from '../views/About.vue'
|
|
||||||
|
|
||||||
|
|
||||||
const routes = [
|
|
||||||
{
|
|
||||||
path: '/',
|
|
||||||
name: 'Home',
|
|
||||||
component: Home
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/about',
|
|
||||||
name: 'About',
|
|
||||||
// You can only use pre-loading to add routes, not the on-demand loading method.
|
|
||||||
component: About
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
const router = createRouter({
|
|
||||||
history: createMemoryHistory(),
|
|
||||||
routes
|
|
||||||
})
|
|
||||||
|
|
||||||
export default router
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
import {createStore} from 'vuex'
|
|
||||||
|
|
||||||
export default createStore({
|
|
||||||
state: {},
|
|
||||||
mutations: {},
|
|
||||||
actions: {},
|
|
||||||
modules: {}
|
|
||||||
})
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="about">
|
|
||||||
<h1>This is an about page</h1>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="home">
|
|
||||||
<img
|
|
||||||
@click="getMessage"
|
|
||||||
alt="Vue logo"
|
|
||||||
src="../assets/appicon.png"
|
|
||||||
:style="{ height: '400px' }"
|
|
||||||
/>
|
|
||||||
<HelloWorld :msg="message" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { ref } from "vue";
|
|
||||||
import HelloWorld from "@/components/HelloWorld.vue";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "Home",
|
|
||||||
components: {
|
|
||||||
HelloWorld,
|
|
||||||
},
|
|
||||||
setup() {
|
|
||||||
const message = ref("Click the Icon");
|
|
||||||
|
|
||||||
const getMessage = () => {
|
|
||||||
window.backend
|
|
||||||
.basic()
|
|
||||||
.then((res) => {
|
|
||||||
message.value = res;
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
console.log(err);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
message: message,
|
|
||||||
getMessage: getMessage,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
let cssConfig = {};
|
|
||||||
|
|
||||||
if (process.env.NODE_ENV == 'production') {
|
|
||||||
cssConfig = {
|
|
||||||
extract: {
|
|
||||||
filename: '[name].css',
|
|
||||||
chunkFilename: '[name].css'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
chainWebpack: config => {
|
|
||||||
let limit = 9999999999999999;
|
|
||||||
config.module
|
|
||||||
.rule('images')
|
|
||||||
.test(/\.(png|gif|jpg)(\?.*)?$/i)
|
|
||||||
.use('url-loader')
|
|
||||||
.loader('url-loader')
|
|
||||||
.tap(options => Object.assign(options, {limit: limit}));
|
|
||||||
config.module
|
|
||||||
.rule('fonts')
|
|
||||||
.test(/\.(woff2?|eot|ttf|otf|svg)(\?.*)?$/i)
|
|
||||||
.use('url-loader')
|
|
||||||
.loader('url-loader')
|
|
||||||
.options({
|
|
||||||
limit: limit
|
|
||||||
});
|
|
||||||
},
|
|
||||||
css: cssConfig,
|
|
||||||
configureWebpack: {
|
|
||||||
output: {
|
|
||||||
filename: '[name].js'
|
|
||||||
},
|
|
||||||
optimization: {
|
|
||||||
splitChunks: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
devServer: {
|
|
||||||
disableHostCheck: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
module {{.BinaryName}}
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/wailsapp/wails {{.WailsVersion}}
|
|
||||||
)
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
_ "embed"
|
|
||||||
"github.com/wailsapp/wails"
|
|
||||||
)
|
|
||||||
|
|
||||||
func basic() string {
|
|
||||||
return "Hello World!"
|
|
||||||
}
|
|
||||||
|
|
||||||
//go:embed frontend/dist/app.js
|
|
||||||
var js string
|
|
||||||
|
|
||||||
//go:embed frontend/dist/app.css
|
|
||||||
var css string
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
|
||||||
Width: 1024,
|
|
||||||
Height: 768,
|
|
||||||
Title: "{{.Name}}",
|
|
||||||
JS: js,
|
|
||||||
CSS: css,
|
|
||||||
Colour: "#131313",
|
|
||||||
})
|
|
||||||
app.Bind(basic)
|
|
||||||
app.Run()
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Vue3 JS",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"shortdescription": "A template based on Vue 3, Vue-router, Vuex, and Webpack5",
|
|
||||||
"description": "A template based on Vue 3, Vue-router, Vuex, and Webpack5",
|
|
||||||
"install": "npm install",
|
|
||||||
"build": "npm run build",
|
|
||||||
"author": "Misitebao <i@misitebao.com>",
|
|
||||||
"created": "2021-05-02 17:25:55",
|
|
||||||
"frontenddir": "frontend",
|
|
||||||
"serve": "npm run serve",
|
|
||||||
"bridge": "src",
|
|
||||||
"wailsdir": "",
|
|
||||||
"platforms": [
|
|
||||||
"linux",
|
|
||||||
"darwin"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "embed"
|
"github.com/leaanthony/mewn"
|
||||||
"github.com/wailsapp/wails"
|
"github.com/wailsapp/wails"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -9,14 +9,11 @@ func basic() string {
|
|||||||
return "Hello World!"
|
return "Hello World!"
|
||||||
}
|
}
|
||||||
|
|
||||||
//go:embed frontend/dist/app.js
|
|
||||||
var js string
|
|
||||||
|
|
||||||
//go:embed frontend/dist/app.css
|
|
||||||
var css string
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
|
js := mewn.String("./frontend/dist/app.js")
|
||||||
|
css := mewn.String("./frontend/dist/app.css")
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
app := wails.CreateApp(&wails.AppConfig{
|
||||||
Width: 1024,
|
Width: 1024,
|
||||||
Height: 768,
|
Height: 768,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "embed"
|
"github.com/leaanthony/mewn"
|
||||||
"github.com/wailsapp/wails"
|
"github.com/wailsapp/wails"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -9,14 +9,11 @@ func basic() string {
|
|||||||
return "Hello World!"
|
return "Hello World!"
|
||||||
}
|
}
|
||||||
|
|
||||||
//go:embed frontend/dist/app.js
|
|
||||||
var js string
|
|
||||||
|
|
||||||
//go:embed frontend/dist/app.css
|
|
||||||
var css string
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
|
js := mewn.String("./frontend/dist/app.js")
|
||||||
|
css := mewn.String("./frontend/dist/app.css")
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
app := wails.CreateApp(&wails.AppConfig{
|
||||||
Width: 1024,
|
Width: 1024,
|
||||||
Height: 768,
|
Height: 768,
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"core-js": "^3.6.4",
|
"core-js": "^3.6.4",
|
||||||
"regenerator-runtime": "^0.13.3",
|
"regenerator-runtime": "^0.13.3",
|
||||||
"vue": "^2.6.11",
|
"vue": "^2.6.11",
|
||||||
"vuetify": "^2.3.15",
|
"vuetify": "^2.2.15",
|
||||||
"@wailsapp/runtime": "^1.0.10"
|
"@wailsapp/runtime": "^1.0.10"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -24,13 +24,13 @@
|
|||||||
<v-app-bar-nav-icon @click.stop="drawer = !drawer"></v-app-bar-nav-icon>
|
<v-app-bar-nav-icon @click.stop="drawer = !drawer"></v-app-bar-nav-icon>
|
||||||
<v-toolbar-title>Application</v-toolbar-title>
|
<v-toolbar-title>Application</v-toolbar-title>
|
||||||
</v-app-bar>
|
</v-app-bar>
|
||||||
<v-main>
|
<v-content>
|
||||||
<v-container fluid class="px-0">
|
<v-container fluid class="px-0">
|
||||||
<v-layout justify-center align-center class="px-0">
|
<v-layout justify-center align-center class="px-0">
|
||||||
<hello-world></hello-world>
|
<hello-world></hello-world>
|
||||||
</v-layout>
|
</v-layout>
|
||||||
</v-container>
|
</v-container>
|
||||||
</v-main>
|
</v-content>
|
||||||
<v-footer app fixed>
|
<v-footer app fixed>
|
||||||
<span style="margin-left:1em">© You</span>
|
<span style="margin-left:1em">© You</span>
|
||||||
</v-footer>
|
</v-footer>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "embed"
|
"github.com/leaanthony/mewn"
|
||||||
"github.com/wailsapp/wails"
|
"github.com/wailsapp/wails"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -9,14 +9,11 @@ func basic() string {
|
|||||||
return "Hello World!"
|
return "Hello World!"
|
||||||
}
|
}
|
||||||
|
|
||||||
//go:embed frontend/dist/app.js
|
|
||||||
var js string
|
|
||||||
|
|
||||||
//go:embed frontend/dist/app.css
|
|
||||||
var css string
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
|
js := mewn.String("./frontend/dist/app.js")
|
||||||
|
css := mewn.String("./frontend/dist/app.css")
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
app := wails.CreateApp(&wails.AppConfig{
|
||||||
Width: 1024,
|
Width: 1024,
|
||||||
Height: 768,
|
Height: 768,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
// Version - Wails version
|
// Version - Wails version
|
||||||
const Version = "v1.16.9"
|
const Version = "v1.7.2-pre3"
|
||||||
|
|||||||
@@ -39,6 +39,12 @@ Create your first project by running 'wails init'.`
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check Mewn
|
||||||
|
err = cmd.CheckMewn(false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Check for errors
|
// Check for errors
|
||||||
// CheckDependencies() returns !errors
|
// CheckDependencies() returns !errors
|
||||||
// so to get the right message in this
|
// so to get the right message in this
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
//go:build dev
|
|
||||||
// +build dev
|
// +build dev
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
//go:build dev
|
|
||||||
// +build dev
|
// +build dev
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -304,7 +305,7 @@ func updateWailsVersion(currentVersion, latestVersion *semver.Version) error {
|
|||||||
new := fmt.Sprintf("%s v%s", wailsModule, latestVersion)
|
new := fmt.Sprintf("%s v%s", wailsModule, latestVersion)
|
||||||
|
|
||||||
goMod = strings.Replace(goMod, old, new, -1)
|
goMod = strings.Replace(goMod, old, new, -1)
|
||||||
err := os.WriteFile(goModFile, []byte(goMod), 0600)
|
err := ioutil.WriteFile(goModFile, []byte(goMod), 0600)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
checkSpinner.Error()
|
checkSpinner.Error()
|
||||||
return err
|
return err
|
||||||
@@ -342,7 +343,7 @@ func patchMainJS() error {
|
|||||||
newStartLine := `Wails.Init`
|
newStartLine := `Wails.Init`
|
||||||
mainJSContents = strings.Replace(mainJSContents, oldStartLine, newStartLine, -1)
|
mainJSContents = strings.Replace(mainJSContents, oldStartLine, newStartLine, -1)
|
||||||
|
|
||||||
err := os.WriteFile(mainJSFile, []byte(mainJSContents), 0600)
|
err := ioutil.WriteFile(mainJSFile, []byte(mainJSContents), 0600)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
checkSpinner.Error()
|
checkSpinner.Error()
|
||||||
return err
|
return err
|
||||||
|
|||||||