Added BASE_PATH build variable for JS App

pull/3/head
Dmitry Ignatiev 1 year ago
parent 006470eda8
commit 02de8ea161

@ -47,7 +47,13 @@
нужно вызывать `npm install` - это команда скачает зависимости приложения. нужно вызывать `npm install` - это команда скачает зависимости приложения.
- После этого, в этой же директории необходимо выполнить команду `npm run build`, в результате чего, - После этого, в этой же директории необходимо выполнить команду `npm run build`, в результате чего,
в этой директории появится директория `wwwroot`, содержащая файл `index.html`, в этой директории появится директория `wwwroot`, содержащая файл `index.html`,
результирующий код на JS, а также его ресурсы, такие как картинки и файлы стилей(css). результирующий код на JS, а также его ресурсы, такие как картинки и файлы стилей(css). \
Перед выполнением этой команды, также можно установить переменную среды `BASE_PATH`, в значение, \
являющееся префиксом в пути URL, по которому приложение будет находится. По умолчанию, `BASE_PATH` \
трактуется как имеющее значение `/`, таким образом приложение должно раздаваться веб-сервером из корня сайта. \
Если же вы хотите, чтобы приложение находилось например по адресу `http://<домен>/todo/`, тогда необходимо \
установить `BASE_PATH` в значение `/todo/` соответственно. Для установки переменной среды, доступной во время \
сборки образа, используйте директиву `ARG` внутри докер-файла(и соответственно опцию `--build-arg` при вызове `docker build`).
Для запуска `JavaScript` приложения `NodeJS` не нужен, достаточно лишь любого веб-сервера, и в Для запуска `JavaScript` приложения `NodeJS` не нужен, достаточно лишь любого веб-сервера, и в
нашем случае, в API-сервисе такой имеется(он называется `Kestrel`). Для хостинга JS-приложения в API-сервисе, необходимо всего лишь скопировать упомянутую выше директорию `wwwroot` внутрь результирующей директории API-сервиса(которая получается после выполнения `dotnet publish ...`). нашем случае, в API-сервисе такой имеется(он называется `Kestrel`). Для хостинга JS-приложения в API-сервисе, необходимо всего лишь скопировать упомянутую выше директорию `wwwroot` внутрь результирующей директории API-сервиса(которая получается после выполнения `dotnet publish ...`).

@ -2,6 +2,8 @@ import axios from 'axios'
const TIMEOUT_MS = 5000 const TIMEOUT_MS = 5000
const BASE_URL = import.meta.env.BASE_URL ?? '/';
function send(method, url, {params, data} = {}) { function send(method, url, {params, data} = {}) {
return axios({ return axios({
method, method,
@ -14,7 +16,7 @@ function send(method, url, {params, data} = {}) {
export default { export default {
async getAll({search, skip, take, completed} = {}) { async getAll({search, skip, take, completed} = {}) {
let result = await send('GET', '/api/todo', { let result = await send('GET', `${BASE_URL}api/todo`, {
params: { params: {
search, search,
skip, skip,
@ -25,11 +27,11 @@ export default {
return result.data return result.data
}, },
async status() { async status() {
let result = await send('GET', '/api/todo/status') let result = await send('GET', `${BASE_URL}api/todo/status`)
return result.data return result.data
}, },
async create(description) { async create(description) {
let result = await send('POST', '/api/todo', { let result = await send('POST', `${BASE_URL}api/todo`, {
data: { data: {
description description
} }
@ -37,7 +39,7 @@ export default {
return result.data return result.data
}, },
async toggle(isCompleted, ids = []) { async toggle(isCompleted, ids = []) {
let result = await send('POST', '/api/todo/toggle', { let result = await send('POST', `${BASE_URL}api/todo/toggle`, {
data: { data: {
isCompleted, isCompleted,
ids ids
@ -46,11 +48,11 @@ export default {
return result.data return result.data
}, },
async delete(id) { async delete(id) {
let result = await send('DELETE', `/api/todo/${id}`) let result = await send('DELETE', `${BASE_URL}api/todo/${id}`)
return result.data return result.data
}, },
async deleteCompleted() { async deleteCompleted() {
let result = await send('DELETE', '/api/todo/completed') let result = await send('DELETE', `${BASE_URL}api/todo/completed`)
return result.data return result.data
} }
} }

@ -1,4 +1,5 @@
import * as path from 'node:path' import * as path from 'node:path'
import * as process from 'node:process'
import { fileURLToPath, URL } from 'node:url' import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
@ -18,6 +19,7 @@ export default defineConfig({
build: { build: {
outDir: path.resolve(currentDir, 'wwwroot') outDir: path.resolve(currentDir, 'wwwroot')
}, },
base: (process.env.BASE_PATH.replace(/\/$/, '') ?? '') + '/',
server: { server: {
port: 8080, port: 8080,
hot: true, hot: true,

Loading…
Cancel
Save