@evjs/webpack-plugin 0.0.1-rc.6 → 0.0.1-rc.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT.md +75 -13
- package/package.json +3 -3
package/AGENT.md
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
# @evjs/webpack-plugin
|
|
1
|
+
# @evjs/webpack-plugin — Agent Guide
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> AI-agent reference for the `@evjs/webpack-plugin` package. This is an internal package used by `@evjs/cli` — application developers don't configure it directly.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Webpack adapter wrapping `@evjs/build-tools`. Provides:
|
|
8
|
+
1. **`EvWebpackPlugin`** — webpack plugin for server function discovery + child compilation
|
|
9
|
+
2. **`server-fn-loader`** — webpack loader for `"use server"` file transforms
|
|
4
10
|
|
|
5
11
|
## EvWebpackPlugin
|
|
6
12
|
|
|
7
|
-
Auto-discovers `"use server"` files, generates
|
|
13
|
+
Auto-discovers `"use server"` files, generates server entry, spawns a server-targeted child compiler, and emits `manifest.json`.
|
|
8
14
|
|
|
9
15
|
```js
|
|
10
16
|
const { EvWebpackPlugin } = require("@evjs/webpack-plugin");
|
|
@@ -12,27 +18,83 @@ const { EvWebpackPlugin } = require("@evjs/webpack-plugin");
|
|
|
12
18
|
new EvWebpackPlugin({
|
|
13
19
|
server: {
|
|
14
20
|
appFactory: "@evjs/runtime/server#createApp", // default
|
|
15
|
-
runner:
|
|
16
|
-
|
|
17
|
-
setup: [], // extra imports
|
|
21
|
+
runner: "@evjs/runtime/server#serve", // for self-starting servers
|
|
22
|
+
middleware: ["./src/middleware/auth#default"], // middleware imports
|
|
18
23
|
},
|
|
19
24
|
});
|
|
20
25
|
```
|
|
21
26
|
|
|
22
27
|
### Options
|
|
28
|
+
|
|
23
29
|
| Option | Type | Default | Description |
|
|
24
30
|
|--------|------|---------|-------------|
|
|
25
|
-
| `server.appFactory` | `string` | `"@evjs/runtime/server#createApp"` |
|
|
26
|
-
| `server.runner` | `string?` | `undefined` | Runner
|
|
27
|
-
| `server.
|
|
31
|
+
| `server.appFactory` | `string` | `"@evjs/runtime/server#createApp"` | Hono app factory module ref |
|
|
32
|
+
| `server.runner` | `string?` | `undefined` | Runner module ref (e.g., `"@evjs/runtime/server#serve"`) |
|
|
33
|
+
| `server.middleware` | `string[]` | `[]` | Middleware module refs prepended to server entry |
|
|
34
|
+
|
|
35
|
+
### What It Does (Build Pipeline)
|
|
36
|
+
|
|
37
|
+
1. **Discovery** — globs for `*.server.{ts,js,tsx,jsx}` in source tree
|
|
38
|
+
2. **Client transform** — `server-fn-loader` replaces function bodies with `__ev_call` stubs
|
|
39
|
+
3. **Server entry generation** — calls `generateServerEntry()` from `@evjs/build-tools`
|
|
40
|
+
4. **Child compiler** — spawns a webpack child compilation targeting `node` with the server entry
|
|
41
|
+
5. **Manifest emission** — writes `manifest.json` via `processAssets` hook
|
|
42
|
+
|
|
43
|
+
### Output
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
dist/
|
|
47
|
+
├── client/ # client webpack output
|
|
48
|
+
│ ├── main.[hash].js
|
|
49
|
+
│ └── index.html
|
|
50
|
+
└── server/
|
|
51
|
+
├── server.js # server bundle (Node.js)
|
|
52
|
+
└── manifest.json # server function registry
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Manifest Format
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"version": 1,
|
|
60
|
+
"serverFunctions": {
|
|
61
|
+
"abc123:getUsers": {
|
|
62
|
+
"module": "./api/users.server",
|
|
63
|
+
"export": "getUsers"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
28
68
|
|
|
29
69
|
## server-fn-loader
|
|
30
70
|
|
|
31
|
-
Webpack loader for `"use server"` files.
|
|
71
|
+
Webpack loader for `"use server"` files. Automatically detects whether it's running in the client or server compiler and applies the appropriate transform.
|
|
32
72
|
|
|
33
73
|
```js
|
|
34
|
-
{
|
|
74
|
+
{
|
|
75
|
+
test: /\.server\.(ts|tsx|js|jsx)$/,
|
|
76
|
+
use: [
|
|
77
|
+
{ loader: "swc-loader" },
|
|
78
|
+
{ loader: "@evjs/webpack-plugin/server-fn-loader" },
|
|
79
|
+
],
|
|
80
|
+
}
|
|
35
81
|
```
|
|
36
82
|
|
|
37
|
-
Client compiler → replaces function bodies with RPC stubs
|
|
38
|
-
Server compiler →
|
|
83
|
+
**Client compiler** → replaces function bodies with `__ev_call` RPC stubs
|
|
84
|
+
**Server compiler** → preserves function bodies, appends `registerServerFn()` calls
|
|
85
|
+
|
|
86
|
+
## Key Files
|
|
87
|
+
|
|
88
|
+
| File | Purpose |
|
|
89
|
+
|------|---------|
|
|
90
|
+
| `src/index.ts` | `EvWebpackPlugin` — main plugin |
|
|
91
|
+
| `src/server-fn-loader.ts` | Webpack loader for `"use server"` transforms |
|
|
92
|
+
|
|
93
|
+
## Integration with @evjs/cli
|
|
94
|
+
|
|
95
|
+
`@evjs/cli` creates the webpack config in `create-webpack-config.ts`:
|
|
96
|
+
|
|
97
|
+
1. Adds `EvWebpackPlugin` to plugins
|
|
98
|
+
2. Adds `server-fn-loader` to module rules (before `swc-loader`)
|
|
99
|
+
3. Configures dev server proxy for `/api/fn` → API server
|
|
100
|
+
4. In dev mode, sets `runner` to `"@evjs/runtime/server#serve"` for auto-start
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evjs/webpack-plugin",
|
|
3
|
-
"version": "0.0.1-rc.
|
|
3
|
+
"version": "0.0.1-rc.7",
|
|
4
4
|
"description": "Webpack plugin and loaders for the ev framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"author": "xusd320",
|
|
37
37
|
"license": "MIT",
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@evjs/build-tools": "0.0.1-rc.
|
|
40
|
-
"@evjs/manifest": "0.0.1-rc.
|
|
39
|
+
"@evjs/build-tools": "0.0.1-rc.7",
|
|
40
|
+
"@evjs/manifest": "0.0.1-rc.7"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"typescript": "^5.7.3",
|