mirror of
https://github.com/strapi/strapi.git
synced 2025-12-27 15:13:21 +00:00
Fix build release script
Signed-off-by: soupette <cyril@strapi.io>
This commit is contained in:
parent
b4173b9281
commit
5f85849435
3
packages/core/admin/.gitignore
vendored
3
packages/core/admin/.gitignore
vendored
@ -9,4 +9,5 @@ yarn-error.log
|
||||
npm-debug.log
|
||||
.idea
|
||||
.env
|
||||
admin/src/plugins-dev.js
|
||||
admin/src/plugins-dev.js
|
||||
admin/src/plugins.js
|
||||
@ -9,7 +9,9 @@
|
||||
"scripts": {
|
||||
"prepublishOnly": "node ./scripts/build.js",
|
||||
"test": "echo \"no tests yet\"",
|
||||
"develop": "cross-env NODE_ENV=development webpack serve --config webpack.config.dev.js --progress profile",
|
||||
"create:plugin-file": "node ./scripts/create-dev-plugins-file.js",
|
||||
"dev": "cross-env NODE_ENV=development webpack serve --config webpack.config.dev.js --progress profile",
|
||||
"develop": "yarn create:plugin-file && yarn dev",
|
||||
"develop:ce": "STRAPI_DISABLE_EE=true webpack serve --config webpack.config.dev.js --progress profile",
|
||||
"analyze:bundle": "ANALYZE_BUNDLE=true webpack --config webpack.config.dev.js",
|
||||
"analyze:deps": "ANALYZE_DEPS=true webpack serve --config webpack.config.dev.js --progress profile"
|
||||
|
||||
@ -3,16 +3,28 @@
|
||||
const path = require('path');
|
||||
const webpack = require('webpack');
|
||||
const webpackConfig = require('../webpack.config');
|
||||
const {
|
||||
getCorePluginsPath,
|
||||
getPluginToInstallPath,
|
||||
createPluginsFile,
|
||||
} = require('./create-plugins-file');
|
||||
|
||||
const PLUGINS_TO_INSTALL = ['i18n'];
|
||||
|
||||
const buildAdmin = async () => {
|
||||
const entry = path.join(__dirname, '..', 'admin', 'src');
|
||||
const dest = path.join(__dirname, '..', 'build');
|
||||
const corePlugins = getCorePluginsPath();
|
||||
const plugins = getPluginToInstallPath(PLUGINS_TO_INSTALL);
|
||||
const allPlugins = { ...corePlugins, ...plugins };
|
||||
|
||||
await createPluginsFile(allPlugins);
|
||||
|
||||
const args = {
|
||||
entry,
|
||||
dest,
|
||||
cacheDir: __dirname,
|
||||
pluginsPath: [path.resolve(__dirname, '../../../..')],
|
||||
pluginsPath: [path.resolve(__dirname, '../../../../packages')],
|
||||
env: 'production',
|
||||
optimize: true,
|
||||
options: {
|
||||
|
||||
69
packages/core/admin/scripts/create-dev-plugins-file.js
Normal file
69
packages/core/admin/scripts/create-dev-plugins-file.js
Normal file
@ -0,0 +1,69 @@
|
||||
'use strict';
|
||||
|
||||
const { join, resolve, relative } = require('path');
|
||||
const { promisify } = require('util');
|
||||
// eslint-disable-next-line node/no-extraneous-require
|
||||
const glob = promisify(require('glob').glob);
|
||||
const fs = require('fs-extra');
|
||||
const { getCorePluginsPath, createPluginsFile } = require('./create-plugins-file');
|
||||
|
||||
/**
|
||||
* Retrieve all plugins that are inside the plugins folder
|
||||
* @returns Object the plugins
|
||||
*/
|
||||
const getPluginsPackages = async () => {
|
||||
const pathToPackages = resolve(__dirname, '..', '..', '..', 'plugins', '*');
|
||||
const pluginsPackageDirs = await glob(pathToPackages);
|
||||
|
||||
return pluginsPackageDirs
|
||||
.filter(pluginDir => {
|
||||
return fs.existsSync(join(pluginDir, 'admin', 'src', 'index.js'));
|
||||
})
|
||||
.reduce((acc, current) => {
|
||||
const depName = current
|
||||
.replace(/\\/g, '/')
|
||||
.split('/')
|
||||
.slice(-1)[0];
|
||||
|
||||
const adminEntryPoint = resolve(join(__dirname, '..', 'admin', 'src'));
|
||||
|
||||
const pathToPlugin = join(relative(adminEntryPoint, current), 'admin', 'src').replace(
|
||||
/\\/g,
|
||||
'/'
|
||||
);
|
||||
|
||||
acc[depName] = pathToPlugin;
|
||||
|
||||
return acc;
|
||||
}, {});
|
||||
};
|
||||
|
||||
/**
|
||||
* Write the plugins.js file or copy the plugins-dev.js file if it exists
|
||||
*/
|
||||
const createFile = async () => {
|
||||
const customPluginFile = join(__dirname, '..', 'admin', 'src', 'plugins-dev.js');
|
||||
const pluginFileDest = resolve(__dirname, '..', 'admin', 'src', 'plugins.js');
|
||||
|
||||
if (fs.existsSync(customPluginFile)) {
|
||||
await fs.copy(customPluginFile, pluginFileDest);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const corePlugins = getCorePluginsPath();
|
||||
const plugins = await getPluginsPackages();
|
||||
const allPlugins = { ...corePlugins, ...plugins };
|
||||
|
||||
return createPluginsFile(allPlugins);
|
||||
};
|
||||
|
||||
createFile()
|
||||
.then(() => {
|
||||
console.log('plugins.js file created');
|
||||
process.exit();
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
});
|
||||
92
packages/core/admin/scripts/create-plugins-file.js
Normal file
92
packages/core/admin/scripts/create-plugins-file.js
Normal file
@ -0,0 +1,92 @@
|
||||
'use strict';
|
||||
|
||||
const { join, resolve, relative } = require('path');
|
||||
const { camelCase } = require('lodash');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
const CORE_PLUGINS = ['content-type-builder', 'email', 'upload', 'i18n'];
|
||||
|
||||
/**
|
||||
* Retrieve the core plugins path
|
||||
* @returns {Object}
|
||||
*/
|
||||
const getCorePluginsPath = () => {
|
||||
const corePlugins = {};
|
||||
|
||||
for (const dep of CORE_PLUGINS) {
|
||||
const packageAdminPath = join(__dirname, '..', '..', dep, 'admin', 'src');
|
||||
|
||||
const adminEntryPoint = resolve(join(__dirname, '..', 'admin', 'src'));
|
||||
const pathToPlugin = join(relative(adminEntryPoint, packageAdminPath)).replace(/\\/g, '/');
|
||||
|
||||
corePlugins[dep] = pathToPlugin;
|
||||
}
|
||||
|
||||
return corePlugins;
|
||||
};
|
||||
|
||||
/**
|
||||
* Retrieve the plugins real path
|
||||
* @param {Object[]} pluginsToInstall array of plugins located in the plugins folder
|
||||
* @returns Object of plugin's paths
|
||||
*/
|
||||
const getPluginToInstallPath = pluginsToInstall => {
|
||||
const plugins = {};
|
||||
|
||||
for (const dep of pluginsToInstall) {
|
||||
const packageAdminPath = join(__dirname, '..', '..', '..', 'plugins', dep, 'admin', 'src');
|
||||
|
||||
const adminEntryPoint = resolve(join(__dirname, '..', 'admin', 'src'));
|
||||
const pathToPlugin = join(relative(adminEntryPoint, packageAdminPath)).replace(/\\/g, '/');
|
||||
|
||||
plugins[dep] = pathToPlugin;
|
||||
}
|
||||
|
||||
return plugins;
|
||||
};
|
||||
|
||||
/**
|
||||
* Write the plugins.js file
|
||||
* @param {Object} plugins
|
||||
*/
|
||||
const createPluginsFile = async plugins => {
|
||||
const pluginFileDest = resolve(__dirname, '..', 'admin', 'src', 'plugins.js');
|
||||
|
||||
const allPluginsArray = Object.entries(plugins).map(([plugin, pluginPath]) => {
|
||||
return {
|
||||
shortName: camelCase(plugin),
|
||||
name: plugin,
|
||||
pluginPath,
|
||||
};
|
||||
});
|
||||
|
||||
const content = `
|
||||
// To override this file create a plugins-dev.js one and copy the content of the plugin.js one.
|
||||
// When starting the app the script will copy the plugins-dev.js into this one instead.
|
||||
${allPluginsArray
|
||||
.map(({ shortName, pluginPath }) => {
|
||||
const req = `'${pluginPath}'`;
|
||||
|
||||
return `import ${shortName} from ${req};`;
|
||||
})
|
||||
.join('\n')}
|
||||
|
||||
const plugins = {
|
||||
${[...allPluginsArray]
|
||||
.map(({ name, shortName }) => {
|
||||
return ` '${name}': ${shortName},`;
|
||||
})
|
||||
.join('\n')}
|
||||
};
|
||||
|
||||
export default plugins;
|
||||
`;
|
||||
|
||||
return fs.writeFile(pluginFileDest, content);
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
createPluginsFile,
|
||||
getCorePluginsPath,
|
||||
getPluginToInstallPath,
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user