node -vhttps://nodejs.org/ja(Node.jsの公式サイト)
mkdir nuxt_demo cd nuxt_demo
npx nuxi init my-nuxt-appmy-nuxt-appはプロジェクト名。好きな名前を入れてください。
cd my-nuxt-app yarn install
yarn devデフォルトでは、http://localhost:3000/ で Nuxt.js のアプリケーションが動作します。
mkdir nuxt_demo
cd /mnt/c/Users/user/git/nuxt_demo
touch docker-compose.yml
version: '3.9'
services:
nuxt:
container_name: nuxt
build: docker/nuxt
volumes:
- ./front:/app:cached
- nuxt_node_modules:/app/node_modules
ports:
- "80:3000"
- "24678:24678"
tty: true
environment:
- HOST=0.0.0.0
- port=80
- CHOKIDAR_USEPOLLING=true
# command: sh -c "yarn && yarn dev"
volumes:
nuxt_node_modules:
mkdir docker/nuxt touch docker/nuxt/Dockerfile
FROM node:18-slim
ENV TZ Asia/Tokyo
WORKDIR /app
RUN apt-get update \
&& apt-get install -y \
git \
vim
sudo service docker start docker-compose up -d
docker-compose exec nuxt bash
npx nuxi init . --force
Install failed for @nuxt/content@3.3.0, @nuxt/eslint@1.2.0, @nuxt/fonts@0.11.0, @nuxt/icon@1.11.0, @nuxt/image@1.9.0, @nuxt/scripts@0.11.1, @nuxt/test-utils@3.17.2, @nuxt/ui@3.0.0. Do you want to continue adding the modules to nuxt.config?
.gitignore README.md nuxt.config.ts server/ .nuxt/ app.vue package.json tsconfig.json .git/ .output/ node_modules/ public/ yarn.lock
yarn install
yarn dev以下のが表示されればOKです。開発モードになります。
停止方法
「Cntl + C」で開発モード解除exit docker-compose stop sudo service docker stop
cd /mnt/c/Users/user/git/nuxt_demo sudo service docker start docker-compose up -d docker-compose exec nuxt bash yarn dev
├── backend
│ └── api1.php
└── my-nuxt-app
├── .gitignore
├── .nuxt
├── .output
├── README.md
├── app.vue.tmp
├── node_modules
├── nuxt.config.ts
├── package.json
├── pages
│ └── index.vue
├── public
├── server
├── tsconfig.json
└── yarn.lock
nuxt_demo3/backend/api1.php
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json");
echo json_encode(["message" => "Hello from PHP API"]);
nuxt_demo3/my-nuxt-app/pages/index.vue
<template>
<div>
<h1>Nuxt.js + XAMPP</h1>
<p>{{ message }}</p>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
const message = ref('');
onMounted(async () => {
const res = await fetch('http://localhost/api/index.php');
const data = await res.json();
message.value = data.message;
});
</script>
cd git/nuxt_demo3/my-nuxt-app && yarn dev
C:\Users\user\git\nuxt_demo3\my-nuxt-app\pages ├── form1.vue └── index.vue
C:\Users\user\git\nuxt_demo3\backend └── api1.phpform1.vue
<template>
<div>
<h1>Nuxt.js + XAMPP FORM1</h1>
<!-- API から取得したメッセージを表示 -->
<p>{{ message }}</p>
<!-- テキストボックスと送信ボタン -->
<input v-model="inputValue" type="text" placeholder="Enter text" />
<button @click="sendData">Send</button>
<!-- 送信結果の表示 -->
<p>{{ responseMessage }}</p>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
const message = ref('');
const inputValue = ref('');
const responseMessage = ref('');
onMounted(async () => {
const res = await fetch('http://localhost/nuxt_demo3/backend/api1.php');
const data = await res.json();
message.value = data.message;
});
const sendData = async () => {
try {
const res = await fetch('http://localhost/nuxt_demo3/backend/api1.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text: inputValue.value })
});
const data = await res.json();
responseMessage.value = data.response;
} catch (error) {
responseMessage.value = "Error sending data";
}
};
</script>
<style scoped>
input {
margin: 10px 0;
padding: 5px;
}
button {
padding: 5px 10px;
cursor: pointer;
}
</style>
api1.php
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json");
header("Access-Control-Allow-Methods: POST, GET");
header("Access-Control-Allow-Headers: Content-Type");
// JSON 形式のリクエストを受け取る
$input = json_decode(file_get_contents("php://input"), true);
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$text = isset($input['text']) ? $input['text'] : 'No input received';
echo json_encode(["response" => "Received: " . htmlspecialchars($text)]);
} else {
echo json_encode(["message" => "Hello from PHP API"]);
}
URL
http://localhost:3000/form1