@coraltravelcenter/b2c-landing-builder 2.11.0 → 2.12.0
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/README.md +13 -2
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/src/vite/client.js +6 -3
- package/src/vite/config.mjs +18 -3
package/README.md
CHANGED
|
@@ -30,7 +30,8 @@ b2c-landing-vite update
|
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
- `check` проверяет конфигурацию, `order.json` и контракт JS-блоков.
|
|
33
|
-
- `dev` запускает Vite и userscript для
|
|
33
|
+
- `dev` запускает Vite и отдельный userscript с названием проекта для
|
|
34
|
+
Tampermonkey.
|
|
34
35
|
- `build` создаёт CMS-файлы в `@CMS/` и переписывает пути ассетов на CDN.
|
|
35
36
|
- `deploy` собирает проект, проверяет ассеты на CDN и разворачивает CMS-виджеты.
|
|
36
37
|
- `deploy --section <key>` разворачивает только выбранную CMS-секцию, не изменяя
|
|
@@ -144,6 +145,15 @@ Monkey URL, контейнер и CDN prefix не задаются вручну
|
|
|
144
145
|
- контейнер: `#monkey-app`;
|
|
145
146
|
- CDN prefix: `landing-pages/<project.name>`.
|
|
146
147
|
|
|
148
|
+
Dev-сервер начинает с `127.0.0.1:5173` и автоматически выбирает следующий
|
|
149
|
+
свободный порт, поэтому несколько проектов можно запускать одновременно. Если
|
|
150
|
+
задан `B2C_PORT`, порт считается обязательным и занятое значение завершает
|
|
151
|
+
команду ошибкой.
|
|
152
|
+
|
|
153
|
+
Userscript ограничен доменом выбранного бренда и дополнительно проверяет hostname
|
|
154
|
+
перед монтированием. Namespace также содержит бренд, поэтому Coral и Sunmar не
|
|
155
|
+
конфликтуют даже при одинаковом названии проекта.
|
|
156
|
+
|
|
147
157
|
Для Coral и Sunmar настроены отдельные production CDN. Команда `build`
|
|
148
158
|
автоматически выбирает CDN по `site.preset`.
|
|
149
159
|
|
|
@@ -219,7 +229,8 @@ build; дополнительные контейнеры builder не созда
|
|
|
219
229
|
}
|
|
220
230
|
```
|
|
221
231
|
|
|
222
|
-
В dev пути направляются на
|
|
232
|
+
В dev пути направляются на фактический origin текущего Vite-сервера. При
|
|
233
|
+
production build они
|
|
223
234
|
преобразуются в `<assetsBase>/landing-pages/<folder>/...`. Builder
|
|
224
235
|
переписывает только изображения `jpg`, `jpeg`, `png`, `webp`, `avif`, `gif` и
|
|
225
236
|
`svg`; остальные root-relative ресурсы не изменяются.
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coraltravelcenter/b2c-landing-builder",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@coraltravelcenter/b2c-landing-builder",
|
|
9
|
-
"version": "2.
|
|
9
|
+
"version": "2.12.0",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@babel/parser": "7.28.6",
|
package/package.json
CHANGED
package/src/vite/client.js
CHANGED
|
@@ -30,6 +30,9 @@ function waitForContainer() {
|
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
if (window.location.hostname === __B2C_TARGET_HOST__) {
|
|
34
|
+
const container = await waitForContainer();
|
|
35
|
+
mount(container, parts);
|
|
36
|
+
const devOrigin = new URL("/", import.meta.url).origin;
|
|
37
|
+
setupLocalCdnAssetRewrite({root: container, cdnBase: devOrigin});
|
|
38
|
+
}
|
package/src/vite/config.mjs
CHANGED
|
@@ -18,6 +18,18 @@ export function toViteFsUrl(filePath) {
|
|
|
18
18
|
const clientEntryUrl = toViteFsUrl(clientEntry);
|
|
19
19
|
let monkeyPlugin;
|
|
20
20
|
|
|
21
|
+
export function resolveDevServerPort(env = process.env) {
|
|
22
|
+
const explicitPort = env.B2C_PORT;
|
|
23
|
+
if (explicitPort === undefined || explicitPort === "") {
|
|
24
|
+
return {port: 5173, strictPort: false};
|
|
25
|
+
}
|
|
26
|
+
const port = Number(explicitPort);
|
|
27
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
28
|
+
throw new Error("B2C_PORT must be an integer between 1 and 65535");
|
|
29
|
+
}
|
|
30
|
+
return {port, strictPort: true};
|
|
31
|
+
}
|
|
32
|
+
|
|
21
33
|
async function loadMonkeyPlugin() {
|
|
22
34
|
if (monkeyPlugin) return monkeyPlugin;
|
|
23
35
|
|
|
@@ -36,6 +48,7 @@ export async function createViteConfig(root = process.cwd()) {
|
|
|
36
48
|
const preset = resolvePreset(config.site.preset);
|
|
37
49
|
const monkey = await loadMonkeyPlugin();
|
|
38
50
|
const shouldOpen = process.env.B2C_NO_OPEN !== "1";
|
|
51
|
+
const devPort = resolveDevServerPort();
|
|
39
52
|
const vue = resolveScriptStack(config.stack.script).vue
|
|
40
53
|
? await loadProjectVuePlugin(root)
|
|
41
54
|
: null;
|
|
@@ -45,8 +58,7 @@ export async function createViteConfig(root = process.cwd()) {
|
|
|
45
58
|
configFile: false,
|
|
46
59
|
server: {
|
|
47
60
|
host: "127.0.0.1",
|
|
48
|
-
|
|
49
|
-
strictPort: true,
|
|
61
|
+
...devPort,
|
|
50
62
|
cors: true,
|
|
51
63
|
open: shouldOpen ? "/__vite-plugin-monkey.install.user.js" : false,
|
|
52
64
|
fs: {allow: [root, builderRoot]},
|
|
@@ -59,13 +71,16 @@ export async function createViteConfig(root = process.cwd()) {
|
|
|
59
71
|
server: {open: shouldOpen, prefix: false},
|
|
60
72
|
userscript: {
|
|
61
73
|
name: config.project.name,
|
|
62
|
-
namespace:
|
|
74
|
+
namespace: `b2c-landing-builder:${preset.id}`,
|
|
63
75
|
match: [`https://${preset.domain}/monkey/*`],
|
|
64
76
|
grant: "none",
|
|
65
77
|
"run-at": "document-idle",
|
|
66
78
|
},
|
|
67
79
|
}),
|
|
68
80
|
].filter(Boolean),
|
|
81
|
+
define: {
|
|
82
|
+
__B2C_TARGET_HOST__: JSON.stringify(preset.domain),
|
|
83
|
+
},
|
|
69
84
|
};
|
|
70
85
|
}
|
|
71
86
|
|