Open27
nativephp
$ composer create-project laravel/laravel test-nativephp
$ composer require nativephp/electron
$ php artisan native:serve
この記事のとおりに治す
vendor\nativephp\electron\resources\js\electron-builder.js
const isArm64 = process.platform.includes('arm64');
const isWindows = process.platform.includes('win32');
const isLinux = process.platform.includes('linux');
const isDarwin = process.platform.includes('darwin');
できた!!!
window定義は
app\Providers\NativeAppServiceProvider.php
に書くみたい
MenuBar::create()
->withContextMenu(
Menu::new()
->label('My Application')
->separator()
->link('https://nativephp.com', 'Learn more…')
->separator()
->quit()
);
ほう
inertia入れるのがいいのかな?
livewireがいい?
inertia入れる!vue入れる!
react?知らない子ですね...
汚染されるので手動で入れるよ
$ composer require inertiajs/inertia-laravel
$ php artisan inertia:middleware
resources/views/app.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
@vite('resources/js/app.js')
@inertiaHead
</head>
<body>
@inertia
</body>
</html>
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\HandleInertiaRequests::class, // add
],
];
$ npm install @inertiajs/vue3
resources\js\app.js
import { createApp, h } from 'vue'
import { createInertiaApp } from '@inertiajs/vue3'
createInertiaApp({
resolve: name => {
const pages = import.meta.glob('./Pages/**/*.vue', { eager: true })
return pages[`./Pages/${name}.vue`]
},
setup({ el, App, props, plugin }) {
createApp({ render: () => h(App, props) })
.use(plugin)
.mount(el)
},
})
これで同ディレクトリの Pages
を見てくれる
つなぐ
resources\js\Pages\index.vue
<template>
<h1>Hello!</h1>
</template>
routes\web.php
<?php
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
Route::get('/', function () {
return Inertia::render('index');
});
あれ
あ、 $ npm run dev
してないとだめだわ
$ npm install -D @vitejs/plugin-vue
vite.config.js
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from "@vitejs/plugin-vue";
export default defineConfig({
plugins: [
vue(),
laravel({
input: ['resources/css/app.css', 'resources/js/app.js'],
refresh: true,
}),
],
});
できた
ts にする
$ npm install -D typescript @vue/tsconfig
tsconfig.json
{
"extends": "@vue/tsconfig/tsconfig.dom.json",
"include": [
"resources/**/*.ts",
"resources/**/*.d.ts",
"resources/**/*.vue"
],
"compilerOptions": {
"baseUrl": ".",
"types": ["vite/client"],
"paths": {
"@/*": ["resources/js/*"]
}
}
}
resources\js\app.ts
import { createApp, h } from 'vue'
import { createInertiaApp } from '@inertiajs/vue3'
import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers';
import type { DefineComponent } from "vue";
createInertiaApp({
resolve: (name) => resolvePageComponent(
`./Pages/${name}.vue`,
import.meta.glob<DefineComponent>("./Pages/**/*.vue")
),
setup({ el, App, props, plugin }) {
createApp({ render: () => h(App, props) })
.use(plugin)
.mount(el)
},
})
と、app.blade.php vite.config.ts の js を ts にする
コンポーネント自動読み込み
$ npm install -D unplugin-vue-components unplugin-auto-import
"include": [
"*.d.ts"
],
vite.config.js
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from "@vitejs/plugin-vue";
import Components from 'unplugin-vue-components/vite';
import AutoImport from 'unplugin-auto-import/vite';
export default defineConfig({
plugins: [
vue(),
Components({
dirs: ['resources/js/components'],
}),
AutoImport({
imports: ['vue'],
}),
laravel({
input: ['resources/js/app.ts'],
refresh: true,
}),
],
});
ignore追加しとく
/auto-imports.d.ts
/components.d.ts
eslint 入れてくぞ
eslint auto-import 共存
と自動fix
$ npm install --save-dev eslint eslint-plugin-vue @typescript-eslint/parser @typescript-eslint/eslint-plugin vite-plugin-checker
あとこれも
これはなんかうまくいかなかった...
.eslintrc.json
{
"env": {
"node": true,
"commonjs": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:vue/vue3-recommended",
"./.eslintrc-auto-import.json",
"standard"
],
"parserOptions": {
"parser": "@typescript-eslint/parser",
"sourceType": "module"
},
"rules": {
"comma-dangle": ["warn", "only-multiline"],
"no-unused-vars": "warn",
"@typescript-eslint/no-unused-vars": "off",
"vue/no-unused-vars": "off",
"require-await": "warn",
"no-unreachable": "warn",
"vue/multi-word-component-names": "off",
"vue/no-v-model-argument": "off"
}
}
vite.config.js
import { defineConfig } from 'vite'
import laravel from 'laravel-vite-plugin'
import vue from '@vitejs/plugin-vue'
import eslint from 'vite-plugin-eslint'
import Components from 'unplugin-vue-components/vite'
import AutoImport from 'unplugin-auto-import/vite'
const isProd = process.env.NODE_ENV = 'production'
export default defineConfig({
base: './',
plugins: [
vue(),
Components({
dirs: ['resources/js/components'],
}),
AutoImport({
imports: ['vue'],
eslintrc: {
enabled: true,
},
}),
!isProd && eslint({
lintOnStart: true,
include: 'resources/js/**/*.{js,ts,vue}',
fix: true,
}),
laravel({
input: ['resources/js/app.ts'],
refresh: true,
}),
],
})
{{ url()->full() }}
したら
http://127.0.0.1:8100/?_windowId=main
ってでてきた
clockwork は http://localhost:8100/clockwork/app
で見れる
も入れとく
ziggy 入れるよ
ziggy は ziggy-js 経由で入れた
auto import にかます
tailwind 入れとくよ
postcss は cjs じゃなきゃだめ
nativephp なんとscheduler標準装備
app\Console\Kernel.php
全ファイルにアクセスするとき
'local' => [
'driver' => 'local',
'root' => "/", //storage_path('app'),
'throw' => false,
],
sass
npm install -D sass
あと .css を .scss に置き換える