Skip to content

Commit

Permalink
feat(deploy): support server plugin options for deploy
Browse files Browse the repository at this point in the history
  • Loading branch information
yimingjfe committed Sep 20, 2024
1 parent b36bf9f commit 09bb3a4
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 29 deletions.
6 changes: 6 additions & 0 deletions .changeset/mighty-candles-retire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@modern-js/app-tools': patch
---

feat(deploy): support server plugin options for deploy
feat(deploy): 支持生产环境消费 server 插件配置
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ import {
} from '@modern-js/utils';
import { isMainEntry } from '../../../utils/routes';
import { handleDependencies } from '../dependencies';
import { genPluginImportsCode, serverAppContenxtTemplate } from '../utils';
import {
type PluginItem,
genPluginImportsCode,
getPluginsCode,
serverAppContenxtTemplate,
} from '../utils';
import type { CreatePreset } from './platform';

async function cleanDistDirectory(dir: string) {
Expand Down Expand Up @@ -39,8 +44,10 @@ export const createNetlifyPreset: CreatePreset = (

const isEsmProject = moduleType === 'module';

// TODO: support serverPlugin apply options.
const plugins = serverPlugins.map(plugin => plugin.name);
const plugins: PluginItem[] = serverPlugins.map(plugin => [
plugin.name,
plugin.options,
]);

const netlifyOutput = path.join(appDirectory, '.netlify');
const funcsDirectory = path.join(netlifyOutput, 'functions');
Expand Down Expand Up @@ -118,11 +125,7 @@ export const createNetlifyPreset: CreatePreset = (
serverConfigFile: DEFAULT_SERVER_CONFIG,
};

const pluginsCode = `[${plugins
.map((plugin, index) => {
return `plugin_${index}()`;
})
.join(',')}]`;
const pluginsCode = getPluginsCode(plugins);

let handlerCode = (
await fse.readFile(path.join(__dirname, './netlify-handler.js'))
Expand Down
19 changes: 11 additions & 8 deletions packages/solutions/app-tools/src/plugins/deploy/platforms/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,22 @@ import {
fs as fse,
} from '@modern-js/utils';
import { handleDependencies } from '../dependencies';
import { genPluginImportsCode, serverAppContenxtTemplate } from '../utils';
import {
type PluginItem,
genPluginImportsCode,
getPluginsCode,
serverAppContenxtTemplate,
} from '../utils';
import type { CreatePreset } from './platform';

export const createNodePreset: CreatePreset = (appContext, config) => {
const { appDirectory, distDirectory, serverPlugins, moduleType } = appContext;
const isEsmProject = moduleType === 'module';

// TODO: support serverPlugin apply options.
const plugins = serverPlugins.map(plugin => plugin.name);
const plugins: PluginItem[] = serverPlugins.map(plugin => [
plugin.name,
plugin.options,
]);

const outputDirectory = path.join(appDirectory, '.output');
const staticDirectory = path.join(outputDirectory, 'static');
Expand Down Expand Up @@ -47,11 +54,7 @@ export const createNodePreset: CreatePreset = (appContext, config) => {
serverConfigFile: DEFAULT_SERVER_CONFIG,
};

const pluginsCode = `[${plugins
.map((plugin, index) => {
return `plugin_${index}()`;
})
.join(',')}]`;
const pluginsCode = getPluginsCode(plugins);

let entryCode = (
await fse.readFile(path.join(__dirname, './node-entry.js'))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ import {
} from '@modern-js/utils';
import { isMainEntry } from '../../../utils/routes';
import { handleDependencies } from '../dependencies';
import { genPluginImportsCode, serverAppContenxtTemplate } from '../utils';
import {
type PluginItem,
genPluginImportsCode,
getPluginsCode,
serverAppContenxtTemplate,
} from '../utils';
import type { CreatePreset } from './platform';

export const createVercelPreset: CreatePreset = (
Expand All @@ -23,8 +28,10 @@ export const createVercelPreset: CreatePreset = (
} = appContext;
const isEsmProject = moduleType === 'module';

// TODO: support serverPlugin apply options.
const plugins = serverPlugins.map(plugin => plugin.name);
const plugins: PluginItem[] = serverPlugins.map(plugin => [
plugin.name,
plugin.options,
]);

const vercelOutput = path.join(appDirectory, '.vercel');
const outputDirectory = path.join(vercelOutput, 'output');
Expand Down Expand Up @@ -125,11 +132,7 @@ export const createVercelPreset: CreatePreset = (
serverConfigFile: DEFAULT_SERVER_CONFIG,
};

const pluginsCode = `[${plugins
.map((plugin, index) => {
return `plugin_${index}()`;
})
.join(',')}]`;
const pluginsCode = getPluginsCode(plugins || []);

const serverAppContext = serverAppContenxtTemplate(appContext);

Expand Down
18 changes: 13 additions & 5 deletions packages/solutions/app-tools/src/plugins/deploy/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,28 @@ export const serverAppContenxtTemplate = (appContext: IAppContext) => {
};
};

export const getPluginsCode = (plugins: string[]) =>
`[${plugins.map((_, index) => `plugin_${index}()`).join(',')}]`;
export type PluginItem = [string, Record<string, any> | undefined];

export const genPluginImportsCode = (plugins: string[]) => {
export const genPluginImportsCode = (plugins: PluginItem[]) => {
return plugins
.map(
(plugin, index) => `
let plugin_${index} = require('${plugin}')
([name, options], index) => `
let plugin_${index} = require('${name}')
plugin_${index} = plugin_${index}.default || plugin_${index}
`,
)
.join(';\n');
};

export const getPluginsCode = (plugins: PluginItem[]) => {
return `[${plugins
.map(
([, options], index) =>
`plugin_${index}(${options ? JSON.stringify(options) : ''})`,
)
.join(',')}]`;
};

export const getProjectUsage = (
appDirectory: string,
distDirectory: string,
Expand Down

0 comments on commit 09bb3a4

Please sign in to comment.