diff --git a/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/expected/__remax_runtime_options__.js b/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/expected/__remax_runtime_options__.js index a756e71cf..fe8bc8aa3 100644 --- a/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/expected/__remax_runtime_options__.js +++ b/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/expected/__remax_runtime_options__.js @@ -592,7 +592,10 @@ module.exports = { "onShareAppMessage", "onShow" ], - "pages/classPage": [] + "pages/classPage": [ + "onPageScroll", + "onShareAppMessage" + ] }, appEvents: [] } \ No newline at end of file diff --git a/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/expected/pages/classPage.js b/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/expected/pages/classPage.js index 8b3d3cda4..9d327f121 100644 --- a/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/expected/pages/classPage.js +++ b/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/expected/pages/classPage.js @@ -111,6 +111,12 @@ var ClassPage = /*#__PURE__*/function (_React$Component) { _createClass(ClassPage, [{ key: "onShow", value: function onShow() {} + }, { + key: "onShareAppMessage", + value: function onShareAppMessage() {} + }, { + key: "onPageScroll", + value: function onPageScroll() {} }, { key: "render", value: function render() { diff --git a/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/src/pages/classPage.js b/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/src/pages/classPage.js index cf0796d26..15b908e7d 100644 --- a/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/src/pages/classPage.js +++ b/packages/remax-cli/src/__tests__/integration/fixtures/lifeCycle/src/pages/classPage.js @@ -7,6 +7,10 @@ class ClassPage extends React.Component { onHide = () => {}; + onShareAppMessage() {} + + onPageScroll() {} + render() { return class page; } diff --git a/packages/remax-cli/src/build/webpack/plugins/RuntimeOptions.ts b/packages/remax-cli/src/build/webpack/plugins/RuntimeOptions.ts index 75fc2ac5a..6079e9a08 100644 --- a/packages/remax-cli/src/build/webpack/plugins/RuntimeOptions.ts +++ b/packages/remax-cli/src/build/webpack/plugins/RuntimeOptions.ts @@ -1,6 +1,5 @@ import { Compiler, compilation } from 'webpack'; import * as path from 'path'; -import { appEvents, pageEvents } from '@remax/macro'; import { slash } from '@remax/shared'; import Store from '@remax/build-store'; import getModules from '../../utils/modules'; @@ -70,7 +69,7 @@ export default class RuntimeOptionsPlugin { new Set( modules .reduce((acc, cur) => { - return [...acc, ...(pageEvents.get(slash(cur)) || []), ...(pageClassEvents.get(slash(cur)) || [])]; + return [...acc, ...(Store.pageEvents.get(slash(cur)) || []), ...(pageClassEvents.get(slash(cur)) || [])]; }, []) .sort() ) @@ -82,9 +81,9 @@ export default class RuntimeOptionsPlugin { getAppEvents() { let events: string[] = []; - for (const key of appEvents.keys()) { + for (const key of Store.appEvents.keys()) { // 这里 get 不可能为空 - events = events.concat(Array.from(appEvents.get(key)!)); + events = events.concat(Array.from(Store.appEvents.get(key)!)); } for (const key of appClassEvents.keys()) { diff --git a/packages/remax-macro/src/macro.ts b/packages/remax-macro/src/macro.ts index 28b777569..0963ec8dc 100644 --- a/packages/remax-macro/src/macro.ts +++ b/packages/remax-macro/src/macro.ts @@ -2,11 +2,12 @@ import * as React from 'react'; import { NodePath } from '@babel/traverse'; import { createMacro } from 'babel-plugin-macros'; import { slash } from '@remax/shared'; +import Store from '@remax/build-store'; import createHostComponentMacro from './createHostComponent'; import requirePluginComponentMacro from './requirePluginComponent'; import requirePluginMacro from './requirePlugin'; -import usePageEventMacro, { pageEvents } from './usePageEvent'; -import useAppEventMacro, { appEvents } from './useAppEvent'; +import usePageEventMacro from './usePageEvent'; +import useAppEventMacro from './useAppEvent'; type PageEventName = | 'onLoad' @@ -47,8 +48,8 @@ function remax({ references, state }: { references: { [name: string]: NodePath[] const importer = slash(state.file.opts.filename); - appEvents.delete(importer); - pageEvents.delete(importer); + Store.appEvents.delete(importer); + Store.pageEvents.delete(importer); references.useAppEvent?.forEach(path => useAppEventMacro(path, state)); @@ -68,6 +69,4 @@ export declare function usePageEvent(eventName: PageEventName, callback: (...par export declare function useAppEvent(eventName: AppEventName, callback: (...params: any[]) => any): void; -export { pageEvents, appEvents }; - export default createMacro(remax); diff --git a/packages/remax-macro/src/useAppEvent.ts b/packages/remax-macro/src/useAppEvent.ts index ee1306f98..525689fad 100644 --- a/packages/remax-macro/src/useAppEvent.ts +++ b/packages/remax-macro/src/useAppEvent.ts @@ -1,21 +1,18 @@ import * as t from '@babel/types'; import { slash } from '@remax/shared'; import { NodePath } from '@babel/traverse'; +import Store from '@remax/build-store'; import insertImportDeclaration from './utils/insertImportDeclaration'; const PACKAGE_NAME = '@remax/runtime'; const FUNCTION_NAME = 'useAppEvent'; -type Events = Set; - -export const appEvents = new Map(); - function getArguments(callExpression: NodePath, importer: string) { const args = callExpression.node.arguments; const eventName = args[0] as t.StringLiteral; const callback = args[1]; - appEvents.set(importer, appEvents.get(importer)?.add(eventName.value) ?? new Set([eventName.value])); + Store.appEvents.set(importer, Store.appEvents.get(importer)?.add(eventName.value) ?? new Set([eventName.value])); return [eventName, callback]; } diff --git a/packages/remax-macro/src/usePageEvent.ts b/packages/remax-macro/src/usePageEvent.ts index 898eca1c6..5ac33649f 100644 --- a/packages/remax-macro/src/usePageEvent.ts +++ b/packages/remax-macro/src/usePageEvent.ts @@ -1,21 +1,18 @@ import * as t from '@babel/types'; import { NodePath } from '@babel/traverse'; import { slash } from '@remax/shared'; +import Store from '@remax/build-store'; import insertImportDeclaration from './utils/insertImportDeclaration'; const PACKAGE_NAME = '@remax/runtime'; const FUNCTION_NAME = 'usePageEvent'; -type Events = Set; - -export const pageEvents = new Map(); - function getArguments(callExpression: NodePath, importer: string) { const args = callExpression.node.arguments; const eventName = args[0] as t.StringLiteral; const callback = args[1]; - pageEvents.set(importer, pageEvents.get(importer)?.add(eventName.value) ?? new Set([eventName.value])); + Store.pageEvents.set(importer, Store.pageEvents.get(importer)?.add(eventName.value) ?? new Set([eventName.value])); return [eventName, callback]; }