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