refactor: toward server HMR
This commit is contained in:
parent
eee0eff666
commit
44a183ca02
|
@ -3,18 +3,19 @@ const {
|
||||||
} = process.env;
|
} = process.env;
|
||||||
|
|
||||||
module.exports = (api) => {
|
module.exports = (api) => {
|
||||||
api.cache(false);
|
api.cache(true);
|
||||||
return {
|
const plugins = [
|
||||||
plugins: [
|
'@babel/plugin-proposal-class-properties',
|
||||||
'@babel/plugin-proposal-class-properties',
|
'@babel/plugin-proposal-private-methods',
|
||||||
'@babel/plugin-proposal-private-methods',
|
'@babel/plugin-syntax-jsx',
|
||||||
'@babel/plugin-syntax-jsx',
|
[
|
||||||
[
|
'babel-plugin-webpack-alias',
|
||||||
'babel-plugin-webpack-alias',
|
{
|
||||||
{
|
config: LATUS_WEBPACK_CONFIG,
|
||||||
config: LATUS_WEBPACK_CONFIG,
|
},
|
||||||
},
|
|
||||||
]
|
|
||||||
],
|
],
|
||||||
|
];
|
||||||
|
return {
|
||||||
|
plugins,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
1
packages/core/.gitignore
vendored
1
packages/core/.gitignore
vendored
|
@ -3,3 +3,4 @@
|
||||||
!/.*
|
!/.*
|
||||||
!src/**/*.js
|
!src/**/*.js
|
||||||
!/test/**/*.js
|
!/test/**/*.js
|
||||||
|
!/virtual.js
|
|
@ -16,12 +16,15 @@
|
||||||
"client.js.map",
|
"client.js.map",
|
||||||
"index.js",
|
"index.js",
|
||||||
"index.js.map",
|
"index.js.map",
|
||||||
|
"loader.js",
|
||||||
|
"loader.js.map",
|
||||||
"server.js",
|
"server.js",
|
||||||
"server.js.map",
|
"server.js.map",
|
||||||
"start.js",
|
"start.js",
|
||||||
"start.js.map",
|
"start.js.map",
|
||||||
"test.js",
|
"test.js",
|
||||||
"test.js.map"
|
"test.js.map",
|
||||||
|
"virtual.js"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@neutrinojs/copy": "^9.4.0",
|
"@neutrinojs/copy": "^9.4.0",
|
||||||
|
@ -29,6 +32,7 @@
|
||||||
"autoprefixer": "^9.8.6",
|
"autoprefixer": "^9.8.6",
|
||||||
"debug": "4.3.1",
|
"debug": "4.3.1",
|
||||||
"js-yaml": "3.14.0",
|
"js-yaml": "3.14.0",
|
||||||
|
"loader-utils": "^2.0.0",
|
||||||
"lodash.flatten": "^4.4.0",
|
"lodash.flatten": "^4.4.0",
|
||||||
"lodash.get": "^4.4.2",
|
"lodash.get": "^4.4.2",
|
||||||
"lodash.set": "^4.3.2",
|
"lodash.set": "^4.3.2",
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import {LatusPlugin} from './latus-plugin';
|
import Latus from './latus';
|
||||||
|
|
||||||
const {
|
const {
|
||||||
LATUS_ESLINT_DEFAULTS = require.resolve('@latus/build/build/.eslint.defaults.js'),
|
LATUS_ESLINT_DEFAULTS = require.resolve('@latus/build/build/.eslint.defaults.js'),
|
||||||
|
@ -31,6 +31,8 @@ export default (latus) => (neutrino) => {
|
||||||
.use(EnvironmentPlugin, [{
|
.use(EnvironmentPlugin, [{
|
||||||
SIDE: 'server',
|
SIDE: 'server',
|
||||||
}]);
|
}]);
|
||||||
|
const node = r('@neutrinojs/node');
|
||||||
|
node()(neutrino);
|
||||||
const defaults = Object.keys(latus.originalConfig)
|
const defaults = Object.keys(latus.originalConfig)
|
||||||
.map((plugin) => {
|
.map((plugin) => {
|
||||||
const config = {};
|
const config = {};
|
||||||
|
@ -53,38 +55,44 @@ export default (latus) => (neutrino) => {
|
||||||
latus.get(path),
|
latus.get(path),
|
||||||
]),
|
]),
|
||||||
);
|
);
|
||||||
neutrino.config
|
|
||||||
.plugin('latus')
|
|
||||||
.use(LatusPlugin(
|
|
||||||
neutrino,
|
|
||||||
() => config,
|
|
||||||
(plugin, modulesObject) => {
|
|
||||||
plugin.writeModule('/%/latus/server/virtual', [
|
|
||||||
'global.$$latus = {',
|
|
||||||
` config: ${JSON.stringify(config)},`,
|
|
||||||
` modules: ${modulesObject},`,
|
|
||||||
'};',
|
|
||||||
'if (module.hot) {',
|
|
||||||
' Object.keys(global.$$latus.modules).forEach((key) => {',
|
|
||||||
' module.hot.accept(key, () => {',
|
|
||||||
" console.log('kesy!');",
|
|
||||||
' });',
|
|
||||||
' });',
|
|
||||||
'}',
|
|
||||||
].join('\n'));
|
|
||||||
},
|
|
||||||
));
|
|
||||||
neutrino.config
|
neutrino.config
|
||||||
.entry('index')
|
.entry('index')
|
||||||
.add('/%/latus/server/virtual');
|
.add('@latus/core/virtual');
|
||||||
const nodeExternals = r('webpack-node-externals');
|
const babelOptions = neutrino.config.module
|
||||||
neutrino.config.externals(nodeExternals());
|
.rules.store.get('compile')
|
||||||
|
.uses.store.get('babel')
|
||||||
|
.store.get('options');
|
||||||
|
r('@babel/register')({
|
||||||
|
plugins: babelOptions.plugins,
|
||||||
|
presets: babelOptions.presets,
|
||||||
|
});
|
||||||
|
const paths = Object.keys(config)
|
||||||
|
.map((path) => Latus.runtimePath(path))
|
||||||
|
.filter((path) => !!path);
|
||||||
|
const pathMap = paths.map((path) => `'${path}': require('${path}')`).join(', ');
|
||||||
|
const source = [
|
||||||
|
'global.$$latus = {',
|
||||||
|
` config: ${JSON.stringify(config)},`,
|
||||||
|
` modules: {${pathMap}},`,
|
||||||
|
'};',
|
||||||
|
'if (module.hot) {',
|
||||||
|
];
|
||||||
|
paths.forEach((key) => {
|
||||||
|
source.push(` module.hot.accept('${key}', () => {`);
|
||||||
|
source.push(` console.log('${key}!');`);
|
||||||
|
source.push(' });');
|
||||||
|
});
|
||||||
|
source.push('}');
|
||||||
|
neutrino.config.module
|
||||||
|
.rule('@latus/core/virtual')
|
||||||
|
.test(r.resolve('@latus/core/virtual'))
|
||||||
|
.use('virtual')
|
||||||
|
.loader(`${__dirname}/src/loader`)
|
||||||
|
.options({
|
||||||
|
source: source.join('\n'),
|
||||||
|
});
|
||||||
const mocha = r('@neutrinojs/mocha');
|
const mocha = r('@neutrinojs/mocha');
|
||||||
mocha()(neutrino);
|
mocha()(neutrino);
|
||||||
const node = r('@neutrinojs/node');
|
|
||||||
node({
|
|
||||||
hot: false,
|
|
||||||
})(neutrino);
|
|
||||||
if (process.env.LATUS_LINTING) {
|
if (process.env.LATUS_LINTING) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -96,12 +104,21 @@ export default (latus) => (neutrino) => {
|
||||||
.entry('index')
|
.entry('index')
|
||||||
.prepend('dotenv/config');
|
.prepend('dotenv/config');
|
||||||
}
|
}
|
||||||
|
// Why no worky?
|
||||||
|
// if (process.argv.find((arg) => '--hot' === arg)) {
|
||||||
|
// const entries = neutrino.config.entryPoints.store.get('index').store;
|
||||||
|
// entries.delete(`${r.resolve('webpack/hot/poll')}?1000`);
|
||||||
|
// const entriesArray = Array.from(entries);
|
||||||
|
// entriesArray.unshift('webpack/hot/signal');
|
||||||
|
// // eslint-disable-next-line no-param-reassign
|
||||||
|
// neutrino.config.entryPoints.store.get('index').store = new Set(entriesArray);
|
||||||
|
// }
|
||||||
if (process.argv.find((arg) => '--start-server' === arg)) {
|
if (process.argv.find((arg) => '--start-server' === arg)) {
|
||||||
neutrino.config
|
neutrino.config
|
||||||
.plugin('start-server')
|
.plugin('start-server')
|
||||||
.tap((args) => {
|
.tap((args) => {
|
||||||
const options = args[0];
|
const options = args[0];
|
||||||
options.signal = true;
|
// options.signal = true;
|
||||||
const inspectArg = process.argv.find((arg) => -1 !== arg.indexOf('--inspect'));
|
const inspectArg = process.argv.find((arg) => -1 !== arg.indexOf('--inspect'));
|
||||||
if (inspectArg) {
|
if (inspectArg) {
|
||||||
options.nodeArgs.push(inspectArg);
|
options.nodeArgs.push(inspectArg);
|
||||||
|
@ -118,4 +135,8 @@ export default (latus) => (neutrino) => {
|
||||||
else {
|
else {
|
||||||
neutrino.config.plugins.delete('start-server');
|
neutrino.config.plugins.delete('start-server');
|
||||||
}
|
}
|
||||||
|
const nodeExternals = r('webpack-node-externals');
|
||||||
|
neutrino.config.externals(nodeExternals({
|
||||||
|
allowlist: /@latus\/core\/virtual/,
|
||||||
|
}));
|
||||||
};
|
};
|
||||||
|
|
6
packages/core/src/loader.js
Normal file
6
packages/core/src/loader.js
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
const {getOptions} = require('loader-utils');
|
||||||
|
|
||||||
|
module.exports = function LatusLoader() {
|
||||||
|
const {source} = getOptions(this);
|
||||||
|
return source;
|
||||||
|
};
|
0
packages/core/virtual.js
Normal file
0
packages/core/virtual.js
Normal file
Loading…
Reference in New Issue
Block a user