mirror of https://github.com/laurent22/joplin.git
Tools: Update Joplin plugin generator to Webpack 5, TypeScript 4.8 (#6826)
parent
f59d29f1c5
commit
ea14488dc3
|
@ -2,7 +2,7 @@
|
|||
"name": "<%= packageName %>",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"dist": "webpack --joplin-plugin-config buildMain && webpack --joplin-plugin-config buildExtraScripts && webpack --joplin-plugin-config createArchive",
|
||||
"dist": "webpack --env joplin-plugin-config=buildMain && webpack --env joplin-plugin-config=buildExtraScripts && webpack --env joplin-plugin-config=createArchive",
|
||||
"prepare": "npm run dist",
|
||||
"update": "npm install -g generator-joplin && yo joplin --update"
|
||||
},
|
||||
|
@ -14,18 +14,16 @@
|
|||
"publish"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@types/node": "^14.0.14",
|
||||
"@types/node": "^18.7.13",
|
||||
"chalk": "^4.1.0",
|
||||
"copy-webpack-plugin": "^6.1.0",
|
||||
"fs-extra": "^9.0.1",
|
||||
"glob": "^7.1.6",
|
||||
"on-build-webpack": "^0.1.0",
|
||||
"tar": "^6.0.5",
|
||||
"ts-loader": "^7.0.5",
|
||||
"typescript": "^3.9.3",
|
||||
"webpack": "^4.43.0",
|
||||
"webpack-cli": "^3.3.11",
|
||||
"yargs": "^16.2.0",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"fs-extra": "^10.1.0",
|
||||
"glob": "^8.0.3",
|
||||
"tar": "^6.1.11",
|
||||
"ts-loader": "^9.3.1",
|
||||
"typescript": "^4.8.2",
|
||||
"webpack": "^5.74.0",
|
||||
"webpack-cli": "^4.10.0",
|
||||
"@joplin/lib": "~2.9"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ const crypto = require('crypto');
|
|||
const fs = require('fs-extra');
|
||||
const chalk = require('chalk');
|
||||
const CopyPlugin = require('copy-webpack-plugin');
|
||||
const WebpackOnBuildPlugin = require('on-build-webpack');
|
||||
const tar = require('tar');
|
||||
const glob = require('glob');
|
||||
const execSync = require('child_process').execSync;
|
||||
|
@ -35,6 +34,16 @@ const manifest = readManifest(manifestPath);
|
|||
const pluginArchiveFilePath = path.resolve(publishDir, `${manifest.id}.jpl`);
|
||||
const pluginInfoFilePath = path.resolve(publishDir, `${manifest.id}.json`);
|
||||
|
||||
const { builtinModules } = require('node:module');
|
||||
|
||||
// Webpack5 doesn't polyfill by default and displays a warning when attempting to require() built-in
|
||||
// node modules. Set these to false to prevent Webpack from warning about not polyfilling these modules.
|
||||
// We don't need to polyfill because the plugins run in Electron's Node environment.
|
||||
const moduleFallback = {};
|
||||
for (const moduleName of builtinModules) {
|
||||
moduleFallback[moduleName] = false;
|
||||
}
|
||||
|
||||
function validatePackageJson() {
|
||||
const content = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
||||
if (!content.name || content.name.indexOf('joplin-plugin-') !== 0) {
|
||||
|
@ -164,6 +173,7 @@ const pluginConfig = Object.assign({}, baseConfig, {
|
|||
alias: {
|
||||
api: path.resolve(__dirname, 'api'),
|
||||
},
|
||||
fallback: moduleFallback,
|
||||
// JSON files can also be required from scripts so we include this.
|
||||
// https://github.com/joplin/plugin-bibtex/pull/2
|
||||
extensions: ['.js', '.tsx', '.ts', '.json'],
|
||||
|
@ -198,6 +208,7 @@ const extraScriptConfig = Object.assign({}, baseConfig, {
|
|||
alias: {
|
||||
api: path.resolve(__dirname, 'api'),
|
||||
},
|
||||
fallback: moduleFallback,
|
||||
extensions: ['.js', '.tsx', '.ts', '.json'],
|
||||
},
|
||||
});
|
||||
|
@ -205,11 +216,18 @@ const extraScriptConfig = Object.assign({}, baseConfig, {
|
|||
const createArchiveConfig = {
|
||||
stats: 'errors-only',
|
||||
entry: './dist/index.js',
|
||||
resolve: {
|
||||
fallback: moduleFallback,
|
||||
},
|
||||
output: {
|
||||
filename: 'index.js',
|
||||
path: publishDir,
|
||||
},
|
||||
plugins: [new WebpackOnBuildPlugin(onBuildCompleted)],
|
||||
plugins: [{
|
||||
apply(compiler) {
|
||||
compiler.hooks.done.tap('archiveOnBuildListener', onBuildCompleted);
|
||||
},
|
||||
}],
|
||||
};
|
||||
|
||||
function resolveExtraScriptPath(name) {
|
||||
|
@ -250,11 +268,8 @@ function buildExtraScriptConfigs(userConfig) {
|
|||
return output;
|
||||
}
|
||||
|
||||
function main(processArgv) {
|
||||
const yargs = require('yargs/yargs');
|
||||
const argv = yargs(processArgv).argv;
|
||||
|
||||
const configName = argv['joplin-plugin-config'];
|
||||
function main(environ) {
|
||||
const configName = environ['joplin-plugin-config'];
|
||||
if (!configName) throw new Error('A config file must be specified via the --joplin-plugin-config flag');
|
||||
|
||||
// Webpack configurations run in parallel, while we need them to run in
|
||||
|
@ -292,19 +307,22 @@ function main(processArgv) {
|
|||
return configs[configName];
|
||||
}
|
||||
|
||||
let exportedConfigs = [];
|
||||
|
||||
try {
|
||||
exportedConfigs = main(process.argv);
|
||||
} catch (error) {
|
||||
console.error(chalk.red(error.message));
|
||||
process.exit(1);
|
||||
}
|
||||
module.exports = (env) => {
|
||||
let exportedConfigs = [];
|
||||
|
||||
if (!exportedConfigs.length) {
|
||||
// Nothing to do - for example where there are no external scripts to
|
||||
// compile.
|
||||
process.exit(0);
|
||||
}
|
||||
try {
|
||||
exportedConfigs = main(env);
|
||||
} catch (error) {
|
||||
console.error(error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
module.exports = exportedConfigs;
|
||||
if (!exportedConfigs.length) {
|
||||
// Nothing to do - for example where there are no external scripts to
|
||||
// compile.
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
return exportedConfigs;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue