diff --git a/.changeset/gold-bottles-promise.md b/.changeset/gold-bottles-promise.md new file mode 100644 index 00000000000..f10a97a19b0 --- /dev/null +++ b/.changeset/gold-bottles-promise.md @@ -0,0 +1,15 @@ +--- +'@module-federation/inject-external-runtime-core-plugin': minor +'@module-federation/webpack-bundler-runtime': minor +'@module-federation/data-prefetch': minor +'@module-federation/runtime-tools': minor +'@module-federation/runtime-core': minor +'@module-federation/enhanced': minor +'bundle-size': minor +'@module-federation/runtime': minor +'@module-federation/node': minor +'@module-federation/sdk': minor +'@module-federation/esbuild': patch +--- + +Switch to esm modules by default diff --git a/.cursorignore b/.cursorignore index 08599adf9ed..ed381e3917a 100644 --- a/.cursorignore +++ b/.cursorignore @@ -5,15 +5,9 @@ **/dist/ # Documentation and config files -**/*.md **/*.yaml **/*.yml -**/.eslintrc* -**/.prettierrc* -**/.swcrc -**/jest.config.* -**/tsconfig.* -**/*/stats.json + # Explicitly ignore specific packages packages/typescript/ @@ -24,7 +18,6 @@ packages/native-federation-typescript/ packages/esbuild/ # Ignore specific directories -apps/ webpack/tooling/ webpack/setup/ webpack/test/ @@ -35,7 +28,7 @@ tools/ .vscode/ .verdaccio/ -!apps/manifest-demo/*.ts + # Ignore specific files .cursorignore diff --git a/apps/bundle-size/.babelrc b/apps/bundle-size/.babelrc new file mode 100644 index 00000000000..88ee27b140c --- /dev/null +++ b/apps/bundle-size/.babelrc @@ -0,0 +1,11 @@ +{ + "presets": [ + [ + "@nx/react/babel", + { + "runtime": "automatic" + } + ] + ], + "plugins": [] +} diff --git a/apps/bundle-size/cypress.config.ts b/apps/bundle-size/cypress.config.ts new file mode 100644 index 00000000000..3d66abaa6e5 --- /dev/null +++ b/apps/bundle-size/cypress.config.ts @@ -0,0 +1,7 @@ +import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'; +import { defineConfig } from 'cypress'; + +export default defineConfig({ + e2e: nxE2EPreset(__filename, { cypressDir: 'cypress' }), + defaultCommandTimeout: 20000, +}); diff --git a/apps/bundle-size/cypress/e2e/app.cy.ts b/apps/bundle-size/cypress/e2e/app.cy.ts new file mode 100644 index 00000000000..4383ea93ec1 --- /dev/null +++ b/apps/bundle-size/cypress/e2e/app.cy.ts @@ -0,0 +1,80 @@ +import { getH1, getH3 } from '../support/app.po'; + +describe('3005-runtime-host/', () => { + beforeEach(() => cy.visit('/')); + + describe('Welcome message', () => { + it('should display welcome message', () => { + getH1().contains('Runtime Demo'); + }); + }); + + describe('Image checks', () => { + it('should check that the home-webpack-png and remote1-webpack-png images are not 404', () => { + // Get the src attribute of the home-webpack-png image + cy.get('img.home-webpack-png') + .invoke('attr', 'src') + .then((src) => { + if (!src) { + throw new Error('src must not be empty'); + } + cy.log(src); + cy.request(src).its('status').should('eq', 200); + }); + + // Get the src attribute of the shop-webpack-png image + cy.get('img.remote1-webpack-png') + .invoke('attr', 'src') + .then((src) => { + if (!src) { + throw new Error('src must not be empty'); + } + // Send a GET request to the src URL + cy.request(src).its('status').should('eq', 200); + }); + }); + + it('should check that the home-webpack-svg and remote1-webpack-svg images are not 404', () => { + // Get the src attribute of the home-webpack-png image + cy.get('img.home-webpack-svg') + .invoke('attr', 'src') + .then((src) => { + if (!src) { + throw new Error('src must not be empty'); + } + cy.log(src); + cy.request(src).its('status').should('eq', 200); + }); + + // Get the src attribute of the shop-webpack-png image + cy.get('img.remote1-webpack-svg') + .invoke('attr', 'src') + .then((src) => { + if (!src) { + throw new Error('src must not be empty'); + } + // Send a GET request to the src URL + cy.request(src).its('status').should('eq', 200); + }); + }); + }); + + describe('Shared react hook check', () => { + it('should display text which comes from remote1 hook', () => { + cy.get('.remote1-text') + .invoke('html') + .should('equal', 'Custom hook from localhost:3006 works!'); + }); + }); + + describe('dynamic remote check', () => { + describe('dynamic-remote/ButtonOldAnt', () => { + it('should display remote button', () => { + cy.get('button.test-remote2').contains('Button'); + }); + it('should use host shared(antd)', () => { + cy.get('button.test-remote2').contains('Button from antd@4.24.15'); + }); + }); + }); +}); diff --git a/apps/bundle-size/cypress/fixtures/example.json b/apps/bundle-size/cypress/fixtures/example.json new file mode 100644 index 00000000000..02e4254378e --- /dev/null +++ b/apps/bundle-size/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/apps/bundle-size/cypress/support/app.po.ts b/apps/bundle-size/cypress/support/app.po.ts new file mode 100644 index 00000000000..1fc2527567e --- /dev/null +++ b/apps/bundle-size/cypress/support/app.po.ts @@ -0,0 +1,3 @@ +export const getH1 = () => cy.get('h1'); +export const getH2 = () => cy.get('h2'); +export const getH3 = () => cy.get('h3'); diff --git a/apps/bundle-size/cypress/support/commands.ts b/apps/bundle-size/cypress/support/commands.ts new file mode 100644 index 00000000000..c302a3260e5 --- /dev/null +++ b/apps/bundle-size/cypress/support/commands.ts @@ -0,0 +1,35 @@ +/// + +// *********************************************** +// This example commands.ts shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** + +// eslint-disable-next-line @typescript-eslint/no-namespace +declare namespace Cypress { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + interface Chainable { + login(email: string, password: string): void; + } +} + +// -- This is a parent command -- +Cypress.Commands.add('login', (email, password) => { + // console.log('Custom command example: Login', email, password); +}); +// +// -- This is a child command -- +// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) diff --git a/apps/bundle-size/cypress/support/e2e.ts b/apps/bundle-size/cypress/support/e2e.ts new file mode 100644 index 00000000000..1c1a9e772ba --- /dev/null +++ b/apps/bundle-size/cypress/support/e2e.ts @@ -0,0 +1,17 @@ +// *********************************************************** +// This example support/e2e.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.ts using ES2015 syntax: +import './commands'; diff --git a/apps/bundle-size/cypress/tsconfig.json b/apps/bundle-size/cypress/tsconfig.json new file mode 100644 index 00000000000..0285a6e4c66 --- /dev/null +++ b/apps/bundle-size/cypress/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "allowJs": true, + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["cypress", "node"], + "sourceMap": false + }, + "include": [ + "**/*.ts", + "**/*.js", + "../cypress.config.ts", + "../**/*.cy.ts", + "../**/*.cy.tsx", + "../**/*.cy.js", + "../**/*.cy.jsx", + "../**/*.d.ts" + ] +} diff --git a/apps/bundle-size/package.json b/apps/bundle-size/package.json new file mode 100644 index 00000000000..5584ca0f693 --- /dev/null +++ b/apps/bundle-size/package.json @@ -0,0 +1,17 @@ +{ + "name": "bundle-size", + "private": true, + "version": "0.0.0", + "devDependencies": { + "@module-federation/core": "workspace:*", + "@module-federation/runtime": "workspace:*", + "@module-federation/typescript": "workspace:*", + "@module-federation/enhanced": "workspace:*", + "@module-federation/dts-plugin": "workspace:*", + "@pmmmwh/react-refresh-webpack-plugin": "0.5.15", + "react-refresh": "0.14.2" + }, + "dependencies": { + "antd": "4.24.15" + } +} diff --git a/apps/bundle-size/project.json b/apps/bundle-size/project.json new file mode 100644 index 00000000000..88ce1b21134 --- /dev/null +++ b/apps/bundle-size/project.json @@ -0,0 +1,145 @@ +{ + "name": "bundle-size", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/bundle-size/src", + "projectType": "application", + "tags": [], + "targets": { + "build": { + "executor": "@nx/webpack:webpack", + "outputs": ["{options.outputPath}"], + "defaultConfiguration": "production", + "options": { + "compiler": "babel", + "outputPath": "apps/bundle-size/dist", + "index": "apps/bundle-size/src/index.html", + "baseHref": "/", + "main": "apps/bundle-size/src/index.ts", + "tsConfig": "apps/bundle-size/tsconfig.app.json", + "styles": [], + "scripts": [], + "webpackConfig": "apps/bundle-size/webpack.config.js", + "babelUpwardRootMode": true + }, + "configurations": { + "development": { + "extractLicenses": false, + "optimization": false, + "sourceMap": true, + "vendorChunk": true + }, + "production": { + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": false, + "vendorChunk": false + } + }, + "dependsOn": [ + { + "target": "build", + "dependencies": true + } + ] + }, + "serve": { + "executor": "@nx/webpack:dev-server", + "defaultConfiguration": "production", + "options": { + "buildTarget": "bundle-size:build", + "hmr": true, + "port": 3005, + "devRemotes": ["3006-runtime-remote"] + }, + "configurations": { + "development": { + "buildTarget": "bundle-size:build:development" + }, + "production": { + "buildTarget": "bundle-size:build:production", + "hmr": false + } + }, + "dependsOn": [ + { + "target": "build", + "dependencies": true + } + ] + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/bundle-size/**/*.{ts,tsx,js,jsx}"] + } + }, + "serve-static": { + "executor": "@nx/web:file-server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "bundle-size:build", + "port": 3005 + }, + "configurations": { + "development": { + "buildTarget": "bundle-size:build:development" + }, + "production": { + "buildTarget": "bundle-size:build:production" + } + } + }, + "e2e": { + "executor": "@nx/cypress:cypress", + "options": { + "cypressConfig": "apps/bundle-size/cypress.config.ts", + "testingType": "e2e", + "baseUrl": "http://127.0.0.1:3005", + "browser": "chrome" + }, + "dependsOn": [ + { + "target": "build", + "dependencies": true + } + ], + "configurations": { + "development": { + "runnerUi": true, + "browser": "electron", + "exit": false, + "watch": true + } + } + }, + "test:e2e": { + "executor": "nx:run-commands", + "options": { + "parallel": true, + "commands": [ + { + "command": "lsof -i :3005 || nx run bundle-size:serve", + "forwardAllArgs": false + }, + { + "command": "sleep 4 && nx run bundle-size:e2e", + "forwardAllArgs": true + } + ] + } + }, + "getsize": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npx nx build bundle-size --configuration=production && sleep 1 && if [ -f apps/bundle-size/dist/remoteEntry.js ]; then ls -lah apps/bundle-size/dist/remoteEntry.js | awk '{print \"remoteEntry.js size: \" $5}' && gzip -c apps/bundle-size/dist/remoteEntry.js | wc -c | awk '{print \"gzip size: \" $1 \" bytes\"}' && brotli -c apps/bundle-size/dist/remoteEntry.js | wc -c | awk '{print \"brotli size: \" $1 \" bytes\"}'; else echo \"remoteEntry.js not found\"; fi" + } + ] + } + } + } +} diff --git a/apps/bundle-size/remotes.d.ts b/apps/bundle-size/remotes.d.ts new file mode 100644 index 00000000000..3c64dfcc446 --- /dev/null +++ b/apps/bundle-size/remotes.d.ts @@ -0,0 +1,4 @@ +// declare module 'remote1/useCustomRemoteHook'; +// declare module 'remote1/WebpackSvg'; +// declare module 'remote1/WebpackPng'; +// declare module 'dynamic-remote/ButtonOldAnt'; diff --git a/apps/bundle-size/src/HelloWorld.tsx b/apps/bundle-size/src/HelloWorld.tsx new file mode 100644 index 00000000000..fd70340d2ab --- /dev/null +++ b/apps/bundle-size/src/HelloWorld.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +// Runtime core is auto-injected by the federation plugin + +const HelloWorld = () => { + return ( +
+

Hello World from Module Federation!

+

This is an exposed component from the bundle-size app

+
+ ); +}; + +export default HelloWorld; diff --git a/apps/bundle-size/src/bootstrap.tsx b/apps/bundle-size/src/bootstrap.tsx new file mode 100644 index 00000000000..3493ec10cf4 --- /dev/null +++ b/apps/bundle-size/src/bootstrap.tsx @@ -0,0 +1,18 @@ +import React, { StrictMode } from 'react'; +import { init } from '@module-federation/enhanced/runtime'; +import * as ReactDOM from 'react-dom/client'; +import HelloWorld from './HelloWorld'; + +init({ + name: 'bundle_size', + remotes: [], // No remote references needed +}); + +const root = ReactDOM.createRoot( + document.getElementById('root') as HTMLElement, +); +root.render( + + + , +); diff --git a/apps/bundle-size/src/index.html b/apps/bundle-size/src/index.html new file mode 100644 index 00000000000..19f0d60626e --- /dev/null +++ b/apps/bundle-size/src/index.html @@ -0,0 +1,6 @@ + + + +
+ + diff --git a/apps/bundle-size/src/index.ts b/apps/bundle-size/src/index.ts new file mode 100644 index 00000000000..f994cb80876 --- /dev/null +++ b/apps/bundle-size/src/index.ts @@ -0,0 +1,3 @@ +import { init } from '@module-federation/enhanced/runtime'; + +require('./bootstrap'); diff --git a/apps/bundle-size/tsconfig.app.json b/apps/bundle-size/tsconfig.app.json new file mode 100644 index 00000000000..197608609e9 --- /dev/null +++ b/apps/bundle-size/tsconfig.app.json @@ -0,0 +1,31 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "types": [ + "node", + "@nx/react/typings/cssmodule.d.ts", + "@nx/react/typings/image.d.ts" + ], + "paths": { + "*": ["./@mf-types/*"] + } + }, + "files": [ + "../../node_modules/@nx/react/typings/cssmodule.d.ts", + "../../node_modules/@nx/react/typings/image.d.ts" + ], + "exclude": [ + "jest.config.ts", + "**/*.spec.ts", + "**/*.test.ts", + "**/*.spec.tsx", + "**/*.test.tsx", + "**/*.spec.js", + "**/*.test.js", + "**/*.spec.jsx", + "**/*.test.jsx", + "dist/**" + ], + "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] +} diff --git a/apps/bundle-size/tsconfig.json b/apps/bundle-size/tsconfig.json new file mode 100644 index 00000000000..f5cbb05134c --- /dev/null +++ b/apps/bundle-size/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "./", + "jsx": "react-jsx", + "allowJs": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "resolveJsonModule": true, + "paths": { + "*": ["./@mf-types/*"] + } + }, + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/apps/bundle-size/webpack.config.js b/apps/bundle-size/webpack.config.js new file mode 100644 index 00000000000..665d2e94a91 --- /dev/null +++ b/apps/bundle-size/webpack.config.js @@ -0,0 +1,83 @@ +const path = require('path'); +// const { registerPluginTSTranspiler } = require('nx/src/utils/nx-plugin.js'); +// registerPluginTSTranspiler(); +const { + ModuleFederationPlugin, +} = require('@module-federation/enhanced/webpack'); +const { composePlugins, withNx } = require('@nx/webpack'); +const { withReact } = require('@nx/react'); + +module.exports = composePlugins(withNx(), withReact(), (config, context) => { + config.watchOptions = { + ignored: ['**/node_modules/**', '**/@mf-types/**', '**/dist/**'], + }; + + // const ModuleFederationPlugin = webpack.container.ModuleFederationPlugin; + config.plugins.push( + new ModuleFederationPlugin({ + name: 'bundle_size', + experiments: { + externalRuntime: false, + asyncStartup: true, + optimization: { + disableSnapshot: true, + target: 'web', + }, + }, + remotes: {}, + // library: { type: 'var', name: 'runtime_remote' }, + filename: 'remoteEntry.js', + exposes: { + './HelloWorld': './src/HelloWorld.tsx', + }, + dts: { + tsConfigPath: path.resolve(__dirname, 'tsconfig.app.json'), + }, + shareStrategy: 'loaded-first', + shared: { + react: { + singleton: true, + requiredVersion: '^18.2.0', + }, + 'react/': { + singleton: true, + requiredVersion: '^18.2.0', + }, + 'react-dom': { + singleton: true, + requiredVersion: '^18.2.0', + }, + 'react-dom/': { + singleton: true, + requiredVersion: '^18.2.0', + }, + }, + }), + ); + if (!config.devServer) { + config.devServer = {}; + } + config.devServer.host = '127.0.0.1'; + config.plugins.forEach((p) => { + if (p.constructor.name === 'ModuleFederationPlugin') { + //Temporary workaround - https://github.com/nrwl/nx/issues/16983 + p._options.library = undefined; + } + }); + + //Temporary workaround - https://github.com/nrwl/nx/issues/16983 + config.experiments = { outputModule: false }; + + // Update the webpack config as needed here. + // e.g. `config.plugins.push(new MyPlugin())` + config.output = { + ...config.output, + scriptType: 'text/javascript', + }; + config.optimization.runtimeChunk = false; + config.optimization.innerGraph = true; + config.optimization.minimize = true; + // config.optimization.moduleIds = 'named' + // const mf = await withModuleFederation(defaultConfig); + return config; +}); diff --git a/packages/data-prefetch/jest.config.js b/packages/data-prefetch/jest.config.cjs similarity index 100% rename from packages/data-prefetch/jest.config.js rename to packages/data-prefetch/jest.config.cjs diff --git a/packages/data-prefetch/package.json b/packages/data-prefetch/package.json index 9262ec5f87c..d037af6f36b 100644 --- a/packages/data-prefetch/package.json +++ b/packages/data-prefetch/package.json @@ -2,6 +2,7 @@ "name": "@module-federation/data-prefetch", "description": "Module Federation Data Prefetch", "version": "0.11.4", + "type": "module", "author": "nieyan ", "homepage": "https://github.com/module-federation/core", "license": "MIT", @@ -24,28 +25,28 @@ "exports": { ".": { "types": "./dist/index.cjs.d.ts", - "import": "./dist/index.esm.mjs", - "require": "./dist/index.cjs.js" + "import": "./dist/index.esm.js", + "require": "./dist/index.cjs.cjs" }, "./react": { "types": "./dist/react.cjs.d.ts", - "import": "./dist/react.esm.mjs", - "require": "./dist/react.cjs.js" + "import": "./dist/react.esm.js", + "require": "./dist/react.cjs.cjs" }, "./cli": { "types": "./dist/cli.cjs.d.ts", - "import": "./dist/cli.esm.mjs", - "require": "./dist/cli.cjs.js" + "import": "./dist/cli.esm.js", + "require": "./dist/cli.cjs.cjs" }, "./babel-plugin": { "types": "./dist/babel.cjs.d.ts", - "import": "./dist/babel.esm.mjs", - "require": "./dist/babel.cjs.js" + "import": "./dist/babel.esm.js", + "require": "./dist/babel.cjs.cjs" }, "./universal": { "types": "./dist/universal.cjs.d.ts", - "import": "./dist/universal.esm.mjs", - "require": "./dist/universal.cjs.js" + "import": "./dist/universal.esm.js", + "require": "./dist/universal.cjs.cjs" } }, "typesVersions": { @@ -67,8 +68,8 @@ ] } }, - "main": "dist/index.cjs.js", - "module": "dist/index.esm.mjs", + "main": "dist/index.cjs.cjs", + "module": "dist/index.esm.js", "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" diff --git a/packages/data-prefetch/project.json b/packages/data-prefetch/project.json index dba67f7f0fe..8b7138ac9e5 100644 --- a/packages/data-prefetch/project.json +++ b/packages/data-prefetch/project.json @@ -14,7 +14,7 @@ "tsConfig": "packages/data-prefetch/tsconfig.lib.json", "assets": [], "project": "packages/data-prefetch/package.json", - "rollupConfig": "packages/data-prefetch/rollup.config.js", + "rollupConfig": "packages/data-prefetch/rollup.config.cjs", "compiler": "swc", "format": ["cjs", "esm"], "generatePackageJson": false @@ -24,7 +24,7 @@ "executor": "@nx/jest:jest", "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { - "jestConfig": "packages/data-prefetch/jest.config.js", + "jestConfig": "packages/data-prefetch/jest.config.cjs", "passWithNoTests": true }, "configurations": { diff --git a/packages/data-prefetch/rollup.config.js b/packages/data-prefetch/rollup.config.cjs similarity index 72% rename from packages/data-prefetch/rollup.config.js rename to packages/data-prefetch/rollup.config.cjs index f49529ac5bc..82e97eb84c5 100644 --- a/packages/data-prefetch/rollup.config.js +++ b/packages/data-prefetch/rollup.config.cjs @@ -30,13 +30,14 @@ module.exports = (rollupConfig, _projectOptions) => { }, hoistTransitiveImports: false, entryFileNames: - c.format === 'esm' - ? c.entryFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.entryFileNames.replace(/\.js$/, '.cjs') : c.entryFileNames, chunkFileNames: - c.format === 'esm' - ? c.chunkFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.chunkFileNames.replace(/\.js$/, '.cjs') : c.chunkFileNames, + ...(c.format === 'cjs' ? { externalLiveBindings: false } : {}), })); } else { rollupConfig.output = { @@ -48,13 +49,16 @@ module.exports = (rollupConfig, _projectOptions) => { }, hoistTransitiveImports: false, entryFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.entryFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.entryFileNames.replace(/\.js$/, '.cjs') : rollupConfig.output.entryFileNames, chunkFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.chunkFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.chunkFileNames.replace(/\.js$/, '.cjs') : rollupConfig.output.chunkFileNames, + ...(rollupConfig.output.format === 'cjs' + ? { externalLiveBindings: false } + : {}), }; } diff --git a/packages/data-prefetch/src/cli/index.ts b/packages/data-prefetch/src/cli/index.ts index 65467afcf50..134b405a7b5 100644 --- a/packages/data-prefetch/src/cli/index.ts +++ b/packages/data-prefetch/src/cli/index.ts @@ -48,7 +48,7 @@ export class PrefetchPlugin implements WebpackPluginInstance { this.options.runtimePlugins = []; } - const runtimePath = path.resolve(__dirname, './plugin.esm.mjs'); + const runtimePath = path.resolve(__dirname, './plugin.esm.js'); if (!this.options.runtimePlugins?.includes(runtimePath)) { this.options.runtimePlugins!.push(runtimePath); } diff --git a/packages/enhanced/package.json b/packages/enhanced/package.json index b998c33bdb2..23569c949b0 100644 --- a/packages/enhanced/package.json +++ b/packages/enhanced/package.json @@ -5,7 +5,7 @@ "types": "./dist/src/index.d.ts", "repository": { "type": "git", - "url": "https://github.com/module-federation/core/", + "url": "git+https://github.com/module-federation/core.git", "directory": "packages/enhanced" }, "files": [ diff --git a/packages/enhanced/src/lib/container/runtime/FederationRuntimePlugin.ts b/packages/enhanced/src/lib/container/runtime/FederationRuntimePlugin.ts index 711353e14cd..076b937d82d 100644 --- a/packages/enhanced/src/lib/container/runtime/FederationRuntimePlugin.ts +++ b/packages/enhanced/src/lib/container/runtime/FederationRuntimePlugin.ts @@ -36,18 +36,21 @@ const { mkdirpSync } = require( normalizeWebpackPath('webpack/lib/util/fs'), ) as typeof import('webpack/lib/util/fs'); -const RuntimeToolsPath = require.resolve('@module-federation/runtime-tools'); - +const RuntimeToolsPath = require.resolve( + '@module-federation/runtime-tools/dist/index.esm.js', +); const BundlerRuntimePath = require.resolve( - '@module-federation/webpack-bundler-runtime', + '@module-federation/webpack-bundler-runtime/dist/index.esm.js', + { + paths: [RuntimeToolsPath], + }, +); +const RuntimePath = require.resolve( + '@module-federation/runtime/dist/index.esm.js', { paths: [RuntimeToolsPath], }, ); -const RuntimePath = require.resolve('@module-federation/runtime', { - paths: [RuntimeToolsPath], -}); - const federationGlobal = getFederationGlobalScope(RuntimeGlobals); const onceForCompiler = new WeakSet(); @@ -333,9 +336,12 @@ class FederationRuntimePlugin { runtimePath = alias['@module-federation/runtime$']; } else { if (implementation) { - runtimePath = require.resolve(`@module-federation/runtime`, { - paths: [implementation], - }); + runtimePath = require.resolve( + `@module-federation/runtime/dist/index.esm.js`, + { + paths: [implementation], + }, + ); } } @@ -400,7 +406,7 @@ class FederationRuntimePlugin { if (this.options?.implementation) { this.bundlerRuntimePath = require.resolve( - '@module-federation/webpack-bundler-runtime', + '@module-federation/webpack-bundler-runtime/dist/index.esm.js', { paths: [this.options.implementation], }, diff --git a/packages/esbuild/package.json b/packages/esbuild/package.json index 007a989f082..490f5f8ed4d 100644 --- a/packages/esbuild/package.json +++ b/packages/esbuild/package.json @@ -8,7 +8,7 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/module-federation/core/", + "url": "git+https://github.com/module-federation/core.git", "directory": "packages/esbuild" }, "publishConfig": { diff --git a/packages/node/package.json b/packages/node/package.json index 77ed2128674..b4265e44081 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -18,7 +18,7 @@ }, "./src/plugins/NodeFederationPlugin.js": "./dist/src/plugins/NodeFederationPlugin.js", "./universe-entry-chunk-tracker-plugin": "./dist/src/plugins/UniverseEntryChunkTrackerPlugin.js", - "./src/": "./dist/src/" + "./src/*": "./dist/src/*" }, "typesVersions": { "*": { diff --git a/packages/rspack/src/ModuleFederationPlugin.ts b/packages/rspack/src/ModuleFederationPlugin.ts index 6aa2f0ffd48..4d1b42d4b8c 100644 --- a/packages/rspack/src/ModuleFederationPlugin.ts +++ b/packages/rspack/src/ModuleFederationPlugin.ts @@ -130,7 +130,7 @@ export class ModuleFederationPlugin implements RspackPluginInstance { ).apply(compiler); const runtimeESMPath = require.resolve( - '@module-federation/runtime/dist/index.esm.mjs', + '@module-federation/runtime/dist/index.esm.js', { paths: [options.implementation] }, ); diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json index 90691e48de3..9770cfc827a 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,28 +1,44 @@ { "name": "@module-federation/runtime-core", "version": "0.11.4", + "type": "module", "author": "zhouxiao ", - "main": "./dist/index.cjs.js", - "module": "./dist/index.esm.mjs", + "main": "./dist/index.cjs.cjs", + "module": "./dist/index.esm.js", "types": "./dist/index.cjs.d.ts", "license": "MIT", "publishConfig": { "access": "public" }, + "repository": { + "type": "git", + "url": "https://github.com/module-federation/core/", + "directory": "packages/runtime-core" + }, "files": [ "dist/", "README.md" ], "exports": { ".": { - "types": "./dist/index.cjs.d.ts", - "import": "./dist/index.esm.mjs", - "require": "./dist/index.cjs.js" + "import": { + "types": "./dist/index.esm.d.ts", + "default": "./dist/index.esm.js" + }, + "require": { + "types": "./dist/index.cjs.d.ts", + "default": "./dist/index.cjs.cjs" + } }, "./types": { - "types": "./dist/types.cjs.d.ts", - "import": "./dist/types.esm.mjs", - "require": "./dist/types.cjs.js" + "import": { + "types": "./dist/types.esm.d.ts", + "default": "./dist/types.esm.js" + }, + "require": { + "types": "./dist/types.cjs.d.ts", + "default": "./dist/types.cjs.cjs" + } } }, "typesVersions": { diff --git a/packages/runtime-core/project.json b/packages/runtime-core/project.json index 9da5c2e4cfc..497a680659b 100644 --- a/packages/runtime-core/project.json +++ b/packages/runtime-core/project.json @@ -18,7 +18,7 @@ "external": ["@module-federation/*"], "project": "packages/runtime-core/package.json", "compiler": "swc", - "rollupConfig": "packages/runtime-core/rollup.config.js", + "rollupConfig": "packages/runtime-core/rollup.config.cjs", "format": ["cjs", "esm"], "generatePackageJson": false }, diff --git a/packages/runtime-core/rollup.config.js b/packages/runtime-core/rollup.config.cjs similarity index 88% rename from packages/runtime-core/rollup.config.js rename to packages/runtime-core/rollup.config.cjs index 697ff772fc4..6b3bbb6eef7 100644 --- a/packages/runtime-core/rollup.config.js +++ b/packages/runtime-core/rollup.config.cjs @@ -29,12 +29,12 @@ module.exports = (rollupConfig, projectOptions) => { }, hoistTransitiveImports: false, entryFileNames: - c.format === 'esm' - ? c.entryFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.entryFileNames.replace('.js', '.cjs') : c.entryFileNames, chunkFileNames: - c.format === 'esm' - ? c.chunkFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.chunkFileNames.replace('.js', '.cjs') : c.chunkFileNames, })); } else { @@ -47,12 +47,12 @@ module.exports = (rollupConfig, projectOptions) => { }, hoistTransitiveImports: false, entryFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.entryFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.entryFileNames.replace('.js', '.cjs') : rollupConfig.output.entryFileNames, chunkFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.chunkFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.chunkFileNames.replace('.js', '.cjs') : rollupConfig.output.chunkFileNames, }; } diff --git a/packages/runtime-core/src/core.ts b/packages/runtime-core/src/core.ts index e4c27a82cf6..6ed436b1bb1 100644 --- a/packages/runtime-core/src/core.ts +++ b/packages/runtime-core/src/core.ts @@ -15,7 +15,6 @@ import { ShareScopeMap, InitScope, RemoteEntryInitOptions, - InitTokens, CallFrom, } from './type'; import { getBuilderId, registerPlugins, getRemoteEntry } from './utils'; diff --git a/packages/runtime-plugins/inject-external-runtime-core-plugin/package.json b/packages/runtime-plugins/inject-external-runtime-core-plugin/package.json index b896541cc56..5adb363db5a 100644 --- a/packages/runtime-plugins/inject-external-runtime-core-plugin/package.json +++ b/packages/runtime-plugins/inject-external-runtime-core-plugin/package.json @@ -1,6 +1,7 @@ { "name": "@module-federation/inject-external-runtime-core-plugin", "version": "0.11.4", + "type": "module", "license": "MIT", "description": "A sdk for support module federation", "keywords": [ @@ -16,14 +17,14 @@ }, "author": "zhanghang ", "sideEffects": false, - "main": "./dist/index.cjs.js", - "module": "./dist/index.esm.mjs", + "main": "./dist/index.cjs.cjs", + "module": "./dist/index.esm.js", "types": "./dist/index.cjs.d.ts", "exports": { ".": { "types": "./dist/index.cjs.d.ts", - "import": "./dist/index.esm.mjs", - "require": "./dist/index.cjs.js" + "import": "./dist/index.esm.js", + "require": "./dist/index.cjs.cjs" } }, "typesVersions": { diff --git a/packages/runtime-plugins/inject-external-runtime-core-plugin/project.json b/packages/runtime-plugins/inject-external-runtime-core-plugin/project.json index d8ebac08321..9d87fae636c 100644 --- a/packages/runtime-plugins/inject-external-runtime-core-plugin/project.json +++ b/packages/runtime-plugins/inject-external-runtime-core-plugin/project.json @@ -14,7 +14,7 @@ "tsConfig": "packages/runtime-plugins/inject-external-runtime-core-plugin/tsconfig.lib.json", "assets": [], "project": "packages/runtime-plugins/inject-external-runtime-core-plugin/package.json", - "rollupConfig": "packages/runtime-plugins/inject-external-runtime-core-plugin/rollup.config.js", + "rollupConfig": "packages/runtime-plugins/inject-external-runtime-core-plugin/rollup.config.cjs", "compiler": "swc", "generatePackageJson": false, "format": ["cjs", "esm"] diff --git a/packages/runtime-plugins/inject-external-runtime-core-plugin/rollup.config.js b/packages/runtime-plugins/inject-external-runtime-core-plugin/rollup.config.cjs similarity index 85% rename from packages/runtime-plugins/inject-external-runtime-core-plugin/rollup.config.js rename to packages/runtime-plugins/inject-external-runtime-core-plugin/rollup.config.cjs index 092af6b0ef3..b26898d97cc 100644 --- a/packages/runtime-plugins/inject-external-runtime-core-plugin/rollup.config.js +++ b/packages/runtime-plugins/inject-external-runtime-core-plugin/rollup.config.cjs @@ -26,12 +26,12 @@ module.exports = (rollupConfig, _projectOptions) => { }, hoistTransitiveImports: false, entryFileNames: - c.format === 'esm' - ? c.entryFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.entryFileNames.replace('.js', '.cjs') : c.entryFileNames, chunkFileNames: - c.format === 'esm' - ? c.chunkFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.chunkFileNames.replace('.js', '.cjs') : c.chunkFileNames, })); } else { @@ -44,12 +44,12 @@ module.exports = (rollupConfig, _projectOptions) => { }, hoistTransitiveImports: false, entryFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.entryFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.entryFileNames.replace('.js', '.cjs') : rollupConfig.output.entryFileNames, chunkFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.chunkFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.chunkFileNames.replace('.js', '.cjs') : rollupConfig.output.chunkFileNames, }; } diff --git a/packages/runtime-tools/package.json b/packages/runtime-tools/package.json index 786b66c940e..5af39ae7c14 100644 --- a/packages/runtime-tools/package.json +++ b/packages/runtime-tools/package.json @@ -1,9 +1,10 @@ { "name": "@module-federation/runtime-tools", "version": "0.11.4", + "type": "module", "author": "zhanghang ", - "main": "./dist/index.cjs", - "module": "./dist/index.esm.mjs", + "main": "./dist/index.cjs.cjs", + "module": "./dist/index.esm.js", "types": "./dist/index.cjs.d.ts", "license": "MIT", "repository": { @@ -16,24 +17,44 @@ }, "exports": { ".": { - "types": "./dist/index.cjs.d.ts", - "import": "./dist/index.esm.mjs", - "require": "./dist/index.cjs.js" + "import": { + "types": "./dist/index.esm.d.ts", + "default": "./dist/index.esm.js" + }, + "require": { + "types": "./dist/index.cjs.d.ts", + "default": "./dist/index.cjs.cjs" + } }, "./runtime": { - "types": "./dist/runtime.cjs.d.ts", - "import": "./dist/runtime.esm.mjs", - "require": "./dist/runtime.cjs.js" + "import": { + "types": "./dist/runtime.esm.d.ts", + "default": "./dist/runtime.esm.js" + }, + "require": { + "types": "./dist/runtime.cjs.d.ts", + "default": "./dist/runtime.cjs.cjs" + } }, "./runtime-core": { - "types": "./dist/runtime-core.cjs.d.ts", - "import": "./dist/runtime-core.esm.mjs", - "require": "./dist/runtime-core.cjs.js" + "import": { + "types": "./dist/runtime-core.esm.d.ts", + "default": "./dist/runtime-core.esm.js" + }, + "require": { + "types": "./dist/runtime-core.cjs.d.ts", + "default": "./dist/runtime-core.cjs.cjs" + } }, "./webpack-bundler-runtime": { - "types": "./dist/webpack-bundler-runtime.cjs.d.ts", - "import": "./dist/webpack-bundler-runtime.esm.mjs", - "require": "./dist/webpack-bundler-runtime.cjs.js" + "import": { + "types": "./dist/webpack-bundler-runtime.esm.d.ts", + "default": "./dist/webpack-bundler-runtime.esm.js" + }, + "require": { + "types": "./dist/webpack-bundler-runtime.cjs.d.ts", + "default": "./dist/webpack-bundler-runtime.cjs.cjs" + } }, "./*": "./*" }, diff --git a/packages/runtime-tools/project.json b/packages/runtime-tools/project.json index adbb307e1c7..c2c8858bea2 100644 --- a/packages/runtime-tools/project.json +++ b/packages/runtime-tools/project.json @@ -20,7 +20,7 @@ "assets": [], "project": "packages/runtime-tools/package.json", "compiler": "swc", - "rollupConfig": "packages/runtime-tools/rollup.config.js", + "rollupConfig": "packages/runtime-tools/rollup.config.cjs", "format": ["cjs", "esm"], "external": ["@module-federation/*"], "generatePackageJson": false diff --git a/packages/runtime-tools/rollup.config.js b/packages/runtime-tools/rollup.config.cjs similarity index 80% rename from packages/runtime-tools/rollup.config.js rename to packages/runtime-tools/rollup.config.cjs index 8ff3b1ee10c..b621b0b1e3a 100644 --- a/packages/runtime-tools/rollup.config.js +++ b/packages/runtime-tools/rollup.config.cjs @@ -13,12 +13,12 @@ module.exports = (rollupConfig) => { ...c, hoistTransitiveImports: false, entryFileNames: - c.format === 'esm' - ? c.entryFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.entryFileNames.replace('.js', '.cjs') : c.entryFileNames, chunkFileNames: - c.format === 'esm' - ? c.chunkFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.chunkFileNames.replace('.js', '.cjs') : c.chunkFileNames, })); } else { @@ -26,12 +26,12 @@ module.exports = (rollupConfig) => { ...rollupConfig.output, hoistTransitiveImports: false, entryFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.entryFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.entryFileNames.replace('.js', '.cjs') : rollupConfig.output.entryFileNames, chunkFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.chunkFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.chunkFileNames.replace('.js', '.cjs') : rollupConfig.output.chunkFileNames, }; } diff --git a/packages/runtime/package.json b/packages/runtime/package.json index a3adb30cd70..30142e0404f 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,9 +1,10 @@ { "name": "@module-federation/runtime", "version": "0.11.4", + "type": "module", "author": "zhouxiao ", - "main": "./dist/index.cjs.js", - "module": "./dist/index.esm.mjs", + "main": "./dist/index.cjs.cjs", + "module": "./dist/index.esm.js", "types": "./dist/index.cjs.d.ts", "license": "MIT", "publishConfig": { @@ -20,24 +21,44 @@ ], "exports": { ".": { - "types": "./dist/index.cjs.d.ts", - "import": "./dist/index.esm.mjs", - "require": "./dist/index.cjs.js" + "import": { + "types": "./dist/index.esm.d.ts", + "default": "./dist/index.esm.js" + }, + "require": { + "types": "./dist/index.cjs.d.ts", + "default": "./dist/index.cjs.cjs" + } }, "./helpers": { - "types": "./dist/helpers.cjs.d.ts", - "import": "./dist/helpers.esm.mjs", - "require": "./dist/helpers.cjs.js" + "import": { + "types": "./dist/helpers.esm.d.ts", + "default": "./dist/helpers.esm.js" + }, + "require": { + "types": "./dist/helpers.cjs.d.ts", + "default": "./dist/helpers.cjs.cjs" + } }, "./types": { - "types": "./dist/types.cjs.d.ts", - "import": "./dist/types.esm.mjs", - "require": "./dist/types.cjs.js" + "import": { + "types": "./dist/types.esm.d.ts", + "default": "./dist/types.esm.js" + }, + "require": { + "types": "./dist/types.cjs.d.ts", + "default": "./dist/types.cjs.cjs" + } }, "./core": { - "types": "./dist/core.cjs.d.ts", - "import": "./dist/core.esm.mjs", - "require": "./dist/core.cjs.js" + "import": { + "types": "./dist/core.esm.d.ts", + "default": "./dist/core.esm.js" + }, + "require": { + "types": "./dist/core.cjs.d.ts", + "default": "./dist/core.cjs.cjs" + } }, "./*": "./*" }, diff --git a/packages/runtime/project.json b/packages/runtime/project.json index 0ec67124878..4324b1ed002 100644 --- a/packages/runtime/project.json +++ b/packages/runtime/project.json @@ -21,7 +21,7 @@ "external": ["@module-federation/*"], "project": "packages/runtime/package.json", "compiler": "swc", - "rollupConfig": "packages/runtime/rollup.config.js", + "rollupConfig": "packages/runtime/rollup.config.cjs", "format": ["cjs", "esm"], "generatePackageJson": false }, diff --git a/packages/runtime/rollup.config.js b/packages/runtime/rollup.config.cjs similarity index 74% rename from packages/runtime/rollup.config.js rename to packages/runtime/rollup.config.cjs index a96be7b65bd..e05216c24fe 100644 --- a/packages/runtime/rollup.config.js +++ b/packages/runtime/rollup.config.cjs @@ -4,6 +4,8 @@ const copy = require('rollup-plugin-copy'); const FEDERATION_DEBUG = process.env.FEDERATION_DEBUG || ''; module.exports = (rollupConfig, projectOptions) => { + rollupConfig.treeshake = { preset: 'recommended' }; + rollupConfig.input = { index: 'packages/runtime/src/index.ts', types: 'packages/runtime/src/types.ts', @@ -31,13 +33,14 @@ module.exports = (rollupConfig, projectOptions) => { }, hoistTransitiveImports: false, entryFileNames: - c.format === 'esm' - ? c.entryFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.entryFileNames.replace(/\.js$/, '.cjs') : c.entryFileNames, chunkFileNames: - c.format === 'esm' - ? c.chunkFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.chunkFileNames.replace(/\.js$/, '.cjs') : c.chunkFileNames, + ...(c.format === 'cjs' ? { externalLiveBindings: false } : {}), })); } else { rollupConfig.output = { @@ -49,13 +52,16 @@ module.exports = (rollupConfig, projectOptions) => { }, hoistTransitiveImports: false, entryFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.entryFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.entryFileNames.replace(/\.js$/, '.cjs') : rollupConfig.output.entryFileNames, chunkFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.chunkFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.chunkFileNames.replace(/\.js$/, '.cjs') : rollupConfig.output.chunkFileNames, + ...(rollupConfig.output.format === 'cjs' + ? { externalLiveBindings: false } + : {}), }; } diff --git a/packages/sdk/jest.config.js b/packages/sdk/jest.config.cjs similarity index 100% rename from packages/sdk/jest.config.js rename to packages/sdk/jest.config.cjs diff --git a/packages/sdk/package.json b/packages/sdk/package.json index e21f1beac0a..ac6917dd935 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,7 @@ { "name": "@module-federation/sdk", "version": "0.11.4", + "type": "module", "license": "MIT", "description": "A sdk for support module federation", "keywords": [ @@ -9,7 +10,8 @@ ], "files": [ "dist/", - "README.md" + "README.md", + "LICENSE" ], "repository": { "type": "git", @@ -21,19 +23,29 @@ }, "author": "zhanghang ", "sideEffects": false, - "main": "./dist/index.cjs.js", - "module": "./dist/index.esm.mjs", + "main": "./dist/index.cjs.cjs", + "module": "./dist/index.esm.js", "types": "./dist/index.cjs.d.ts", "exports": { ".": { - "types": "./dist/index.cjs.d.ts", - "import": "./dist/index.esm.mjs", - "require": "./dist/index.cjs.js" + "import": { + "types": "./dist/index.esm.d.ts", + "default": "./dist/index.esm.js" + }, + "require": { + "types": "./dist/index.cjs.d.ts", + "default": "./dist/index.cjs.cjs" + } }, "./normalize-webpack-path": { - "types": "./dist/normalize-webpack-path.cjs.d.ts", - "import": "./dist/normalize-webpack-path.esm.mjs", - "require": "./dist/normalize-webpack-path.cjs.js" + "import": { + "types": "./dist/normalize-webpack-path.esm.d.ts", + "default": "./dist/normalize-webpack-path.esm.js" + }, + "require": { + "types": "./dist/normalize-webpack-path.cjs.d.ts", + "default": "./dist/normalize-webpack-path.cjs.cjs" + } } }, "typesVersions": { diff --git a/packages/sdk/project.json b/packages/sdk/project.json index df9f6620a1f..cbb334cbca7 100644 --- a/packages/sdk/project.json +++ b/packages/sdk/project.json @@ -15,7 +15,7 @@ "assets": [], "project": "packages/sdk/package.json", "additionalEntryPoints": ["packages/sdk/src/normalize-webpack-path.ts"], - "rollupConfig": "packages/sdk/rollup.config.js", + "rollupConfig": "packages/sdk/rollup.config.cjs", "compiler": "swc", "generatePackageJson": false, "format": ["cjs", "esm"] @@ -35,7 +35,7 @@ "executor": "@nx/jest:jest", "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { - "jestConfig": "packages/sdk/jest.config.js", + "jestConfig": "packages/sdk/jest.config.cjs", "passWithNoTests": true }, "configurations": { diff --git a/packages/sdk/rollup.config.js b/packages/sdk/rollup.config.cjs similarity index 70% rename from packages/sdk/rollup.config.js rename to packages/sdk/rollup.config.cjs index a0855ef7402..56d145e69f1 100644 --- a/packages/sdk/rollup.config.js +++ b/packages/sdk/rollup.config.cjs @@ -18,14 +18,16 @@ module.exports = (rollupConfig, _projectOptions) => { } }, hoistTransitiveImports: false, + minifyInternalExports: true, entryFileNames: - c.format === 'esm' - ? c.entryFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.entryFileNames.replace('.js', '.cjs') : c.entryFileNames, chunkFileNames: - c.format === 'esm' - ? c.chunkFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.chunkFileNames.replace('.js', '.cjs') : c.chunkFileNames, + ...(c.format === 'cjs' ? { externalLiveBindings: false } : {}), })); } else { rollupConfig.output = { @@ -36,14 +38,18 @@ module.exports = (rollupConfig, _projectOptions) => { } }, hoistTransitiveImports: false, + minifyInternalExports: true, entryFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.entryFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.entryFileNames.replace('.js', '.cjs') : rollupConfig.output.entryFileNames, chunkFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.chunkFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.chunkFileNames.replace('.js', '.cjs') : rollupConfig.output.chunkFileNames, + ...(rollupConfig.output.format === 'cjs' + ? { externalLiveBindings: false } + : {}), }; } diff --git a/packages/webpack-bundler-runtime/jest.config.js b/packages/webpack-bundler-runtime/jest.config.cjs similarity index 100% rename from packages/webpack-bundler-runtime/jest.config.js rename to packages/webpack-bundler-runtime/jest.config.cjs diff --git a/packages/webpack-bundler-runtime/package.json b/packages/webpack-bundler-runtime/package.json index 4aeb26fc220..f7766bc191b 100644 --- a/packages/webpack-bundler-runtime/package.json +++ b/packages/webpack-bundler-runtime/package.json @@ -2,6 +2,7 @@ "public": true, "name": "@module-federation/webpack-bundler-runtime", "version": "0.11.4", + "type": "module", "license": "MIT", "description": "Module Federation Runtime for webpack", "keywords": [ @@ -21,8 +22,8 @@ "directory": "packages/webpack-bundler-runtime" }, "author": "zhanghang ", - "main": "./dist/index.cjs.js", - "module": "./dist/index.esm.mjs", + "main": "./dist/index.cjs.cjs", + "module": "./dist/index.esm.js", "types": "./dist/index.cjs.d.ts", "dependencies": { "@module-federation/runtime": "workspace:*", @@ -30,12 +31,24 @@ }, "exports": { ".": { - "import": "./dist/index.esm.mjs", - "require": "./dist/index.cjs.js" + "import": { + "types": "./dist/index.esm.d.ts", + "default": "./dist/index.esm.js" + }, + "require": { + "types": "./dist/index.cjs.d.ts", + "default": "./dist/index.cjs.cjs" + } }, "./constant": { - "import": "./dist/constant.esm.mjs", - "require": "./dist/constant.cjs.js" + "import": { + "types": "./dist/constant.esm.d.ts", + "default": "./dist/constant.esm.js" + }, + "require": { + "types": "./dist/constant.cjs.d.ts", + "default": "./dist/constant.cjs.cjs" + } }, "./*": "./*" }, diff --git a/packages/webpack-bundler-runtime/project.json b/packages/webpack-bundler-runtime/project.json index 067239a44a3..5a07994417c 100644 --- a/packages/webpack-bundler-runtime/project.json +++ b/packages/webpack-bundler-runtime/project.json @@ -15,13 +15,13 @@ "tsConfig": "packages/webpack-bundler-runtime/tsconfig.lib.json", "assets": [], "project": "packages/webpack-bundler-runtime/package.json", - "compiler": "tsc", + "compiler": "swc", "format": ["cjs", "esm"], "additionalEntryPoints": [ "packages/webpack-bundler-runtime/src/constant.ts" ], "generatePackageJson": false, - "rollupConfig": "packages/webpack-bundler-runtime/rollup.config.js" + "rollupConfig": "packages/webpack-bundler-runtime/rollup.config.cjs" }, "dependsOn": [ { @@ -44,7 +44,7 @@ "executor": "@nx/jest:jest", "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { - "jestConfig": "packages/webpack-bundler-runtime/jest.config.js", + "jestConfig": "packages/webpack-bundler-runtime/jest.config.cjs", "passWithNoTests": true }, "configurations": { diff --git a/packages/webpack-bundler-runtime/rollup.config.js b/packages/webpack-bundler-runtime/rollup.config.cjs similarity index 62% rename from packages/webpack-bundler-runtime/rollup.config.js rename to packages/webpack-bundler-runtime/rollup.config.cjs index be54c598c3c..35c6c4f032f 100644 --- a/packages/webpack-bundler-runtime/rollup.config.js +++ b/packages/webpack-bundler-runtime/rollup.config.cjs @@ -1,33 +1,42 @@ const copy = require('rollup-plugin-copy'); module.exports = (rollupConfig, projectOptions) => { - rollupConfig.external = [/@module-federation\/runtime/]; + rollupConfig.treeshake = { preset: 'recommended' }; + + rollupConfig.external = [ + /@module-federation\/runtime/, + /@module-federation\/sdk/, + ]; if (Array.isArray(rollupConfig.output)) { rollupConfig.output = rollupConfig.output.map((c) => ({ ...c, hoistTransitiveImports: false, entryFileNames: - c.format === 'esm' - ? c.entryFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.entryFileNames.replace('.js', '.cjs') : c.entryFileNames, chunkFileNames: - c.format === 'esm' - ? c.chunkFileNames.replace('.js', '.mjs') + c.format === 'cjs' + ? c.chunkFileNames.replace('.js', '.cjs') : c.chunkFileNames, + ...(c.format === 'cjs' ? { externalLiveBindings: false } : {}), })); } else { rollupConfig.output = { ...rollupConfig.output, hoistTransitiveImports: false, entryFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.entryFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.entryFileNames.replace('.js', '.cjs') : rollupConfig.output.entryFileNames, chunkFileNames: - rollupConfig.output.format === 'esm' - ? rollupConfig.output.chunkFileNames.replace('.js', '.mjs') + rollupConfig.output.format === 'cjs' + ? rollupConfig.output.chunkFileNames.replace('.js', '.cjs') : rollupConfig.output.chunkFileNames, + ...(rollupConfig.output.format === 'cjs' + ? { externalLiveBindings: false } + : {}), }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 51def155a0d..fbb3a406b97 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -594,6 +594,34 @@ importers: specifier: workspace:* version: link:../../packages/utilities + apps/bundle-size: + dependencies: + antd: + specifier: 4.24.15 + version: 4.24.15(react-dom@18.3.1)(react@18.3.1) + devDependencies: + '@module-federation/core': + specifier: workspace:* + version: link:../../packages/core + '@module-federation/dts-plugin': + specifier: workspace:* + version: link:../../packages/dts-plugin + '@module-federation/enhanced': + specifier: workspace:* + version: link:../../packages/enhanced + '@module-federation/runtime': + specifier: workspace:* + version: link:../../packages/runtime + '@module-federation/typescript': + specifier: workspace:* + version: link:../../packages/typescript + '@pmmmwh/react-refresh-webpack-plugin': + specifier: 0.5.15 + version: 0.5.15(react-refresh@0.14.2)(webpack@5.94.0) + react-refresh: + specifier: 0.14.2 + version: 0.14.2 + apps/esbuild: dependencies: react: @@ -3336,7 +3364,7 @@ packages: '@babel/traverse': 7.25.7 '@babel/types': 7.25.7 convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -12028,7 +12056,7 @@ packages: peerDependencies: react: ^16.3.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 hoist-non-react-statics: 3.3.2 react: 18.3.1 react-is: 16.13.1 @@ -16832,7 +16860,7 @@ packages: html-entities: 2.5.2 loader-utils: 2.0.4 react-refresh: 0.14.2 - schema-utils: 4.2.0 + schema-utils: 4.3.0 source-map: 0.7.4 webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) dev: true @@ -16869,7 +16897,7 @@ packages: html-entities: 2.5.2 loader-utils: 2.0.4 react-refresh: 0.14.2 - schema-utils: 4.2.0 + schema-utils: 4.3.0 source-map: 0.7.4 webpack: 5.98.0(@swc/core@1.10.16)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true @@ -20459,7 +20487,7 @@ packages: dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) execa: 5.1.1 lodash: 4.17.21 parse-json: 5.2.0 @@ -20476,7 +20504,7 @@ packages: dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) dir-glob: 3.0.1 execa: 5.1.1 lodash: 4.17.21 @@ -22431,7 +22459,7 @@ packages: '@swc-node/sourcemap-support': 0.5.1 '@swc/core': 1.7.26(@swc/helpers@0.5.13) colorette: 2.0.20 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) oxc-resolver: 1.12.0 pirates: 4.0.6 tslib: 2.6.3 @@ -23963,7 +23991,7 @@ packages: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.2) '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) eslint: 8.57.1 typescript: 5.5.2 transitivePeerDependencies: @@ -24779,7 +24807,7 @@ packages: peerDependencies: vitest: 1.6.0 dependencies: - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 @@ -24800,7 +24828,7 @@ packages: dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -26072,7 +26100,7 @@ packages: '@ant-design/colors': 6.0.0 '@ant-design/icons': 4.8.3(react-dom@18.3.1)(react@18.3.1) '@ant-design/react-slick': 1.0.2(react@18.3.1) - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.26.0 '@ctrl/tinycolor': 3.6.1 classnames: 2.5.1 copy-to-clipboard: 3.3.3 @@ -29816,7 +29844,6 @@ packages: dependencies: ms: 2.1.3 supports-color: 8.1.1 - dev: true /debug@4.3.7(supports-color@9.3.1): resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} @@ -29829,6 +29856,7 @@ packages: dependencies: ms: 2.1.3 supports-color: 9.3.1 + dev: true /debug@4.4.0(supports-color@5.5.0): resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} @@ -37435,7 +37463,7 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) flatted: 3.3.1 rfdc: 1.4.1 streamroller: 3.1.5 @@ -45988,16 +46016,6 @@ packages: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - /schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - ajv-keywords: 5.1.0(ajv@8.17.1) - dev: true - /schema-utils@4.3.0: resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} engines: {node: '>= 10.13.0'} @@ -47569,6 +47587,7 @@ packages: /supports-color@9.3.1: resolution: {integrity: sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==} engines: {node: '>=12'} + dev: true /supports-hyperlinks@2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} @@ -49887,7 +49906,7 @@ packages: compression: 1.7.4 cookies: 0.9.1 cors: 2.8.5 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) envinfo: 7.11.0 express: 4.18.2 express-rate-limit: 5.5.1 @@ -50055,7 +50074,7 @@ packages: '@volar/typescript': 2.4.5 '@vue/language-core': 2.1.6(typescript@5.5.2) compare-versions: 6.1.1 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) kolorist: 1.8.0 local-pkg: 0.5.0 magic-string: 0.30.17 @@ -50082,7 +50101,7 @@ packages: '@volar/typescript': 2.4.5 '@vue/language-core': 2.1.6(typescript@5.5.2) compare-versions: 6.1.1 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) kolorist: 1.8.0 local-pkg: 0.5.0 magic-string: 0.30.17 @@ -50102,7 +50121,7 @@ packages: vite: optional: true dependencies: - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 2.1.2(typescript@5.5.2) vite: 5.4.12(@types/node@18.16.9)(less@4.3.0)(stylus@0.64.0) @@ -50281,7 +50300,7 @@ packages: acorn-walk: 8.3.4 cac: 6.7.14 chai: 4.5.0 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) execa: 8.0.1 local-pkg: 0.5.0 magic-string: 0.30.11 @@ -50339,7 +50358,7 @@ packages: '@vitest/utils': 1.6.0 acorn-walk: 8.3.4 chai: 4.5.0 - debug: 4.3.7(supports-color@9.3.1) + debug: 4.3.7(supports-color@8.1.1) execa: 8.0.1 local-pkg: 0.5.0 magic-string: 0.30.11