refactor(webpack): use real modules and deprecate virtual modules

This commit is contained in:
Igor Randjelovic
2022-07-10 11:34:23 +02:00
committed by Nathan Walker
parent 2fbc1898db
commit 0556cf9b20
8 changed files with 46 additions and 83 deletions

View File

@ -302,16 +302,6 @@ exports[`javascript configuration for android 1`] = `
),
/* config.plugin('WatchStatePlugin') */
new WatchStatePlugin(),
/* config.plugin('ContextExclusionPlugin|__@nativescript_webpack_virtual_entry_javascript__') */
new ContextExclusionPlugin(
/__@nativescript_webpack_virtual_entry_javascript__.js$/
),
/* config.plugin('VirtualModulesPlugin') */
new VirtualModulesPlugin(
{
'__jest__/src/__@nativescript_webpack_virtual_entry_javascript__': '// VIRTUAL ENTRY START\\\\nrequire(\\\\'@nativescript/core/bundle-entry-points\\\\')\\\\nconst context = require.context(\\"~/\\", /* deep: */ true, /* filter: */ /.(xml|js|s?css)$/);\\\\nglobal.registerWebpackModules(context);\\\\n// VIRTUAL ENTRY END'
}
),
/* config.plugin('ContextExclusionPlugin|exclude_files') */
new ContextExclusionPlugin(
/\\\\b_.+\\\\./
@ -320,7 +310,7 @@ exports[`javascript configuration for android 1`] = `
entry: {
bundle: [
'@nativescript/core/globals/index',
'__jest__/src/__@nativescript_webpack_virtual_entry_javascript__',
'__jest__/node_modules/@nativescript/webpack/dist/stubs/virtual-entry-javascript',
'@nativescript/core/bundle-entry-points',
'__jest__/src/app.js',
'@nativescript/core/ui/frame',
@ -632,16 +622,6 @@ exports[`javascript configuration for ios 1`] = `
),
/* config.plugin('WatchStatePlugin') */
new WatchStatePlugin(),
/* config.plugin('ContextExclusionPlugin|__@nativescript_webpack_virtual_entry_javascript__') */
new ContextExclusionPlugin(
/__@nativescript_webpack_virtual_entry_javascript__.js$/
),
/* config.plugin('VirtualModulesPlugin') */
new VirtualModulesPlugin(
{
'__jest__/src/__@nativescript_webpack_virtual_entry_javascript__': '// VIRTUAL ENTRY START\\\\nrequire(\\\\'@nativescript/core/bundle-entry-points\\\\')\\\\nconst context = require.context(\\"~/\\", /* deep: */ true, /* filter: */ /.(xml|js|s?css)$/);\\\\nglobal.registerWebpackModules(context);\\\\n// VIRTUAL ENTRY END'
}
),
/* config.plugin('ContextExclusionPlugin|exclude_files') */
new ContextExclusionPlugin(
/\\\\b_.+\\\\./
@ -650,7 +630,7 @@ exports[`javascript configuration for ios 1`] = `
entry: {
bundle: [
'@nativescript/core/globals/index',
'__jest__/src/__@nativescript_webpack_virtual_entry_javascript__',
'__jest__/node_modules/@nativescript/webpack/dist/stubs/virtual-entry-javascript',
'@nativescript/core/bundle-entry-points',
'__jest__/src/app.js'
],

View File

@ -302,16 +302,6 @@ exports[`typescript configuration for android 1`] = `
),
/* config.plugin('WatchStatePlugin') */
new WatchStatePlugin(),
/* config.plugin('ContextExclusionPlugin|__@nativescript_webpack_virtual_entry_typescript__') */
new ContextExclusionPlugin(
/__@nativescript_webpack_virtual_entry_typescript__.js$/
),
/* config.plugin('VirtualModulesPlugin') */
new VirtualModulesPlugin(
{
'__jest__/src/__@nativescript_webpack_virtual_entry_typescript__': '// VIRTUAL ENTRY START\\\\nrequire(\\\\'@nativescript/core/bundle-entry-points\\\\')\\\\nconst context = require.context(\\"~/\\", /* deep: */ true, /* filter: */ /\\\\\\\\.(xml|js|(?<!\\\\\\\\.d\\\\\\\\.)ts|s?css)$/);\\\\nglobal.registerWebpackModules(context);\\\\n// VIRTUAL ENTRY END'
}
),
/* config.plugin('ContextExclusionPlugin|exclude_files') */
new ContextExclusionPlugin(
/\\\\b_.+\\\\./
@ -320,7 +310,7 @@ exports[`typescript configuration for android 1`] = `
entry: {
bundle: [
'@nativescript/core/globals/index',
'__jest__/src/__@nativescript_webpack_virtual_entry_typescript__',
'__jest__/node_modules/@nativescript/webpack/dist/stubs/virtual-entry-typescript.js',
'@nativescript/core/bundle-entry-points',
'__jest__/src/app.js',
'@nativescript/core/ui/frame',
@ -632,16 +622,6 @@ exports[`typescript configuration for ios 1`] = `
),
/* config.plugin('WatchStatePlugin') */
new WatchStatePlugin(),
/* config.plugin('ContextExclusionPlugin|__@nativescript_webpack_virtual_entry_typescript__') */
new ContextExclusionPlugin(
/__@nativescript_webpack_virtual_entry_typescript__.js$/
),
/* config.plugin('VirtualModulesPlugin') */
new VirtualModulesPlugin(
{
'__jest__/src/__@nativescript_webpack_virtual_entry_typescript__': '// VIRTUAL ENTRY START\\\\nrequire(\\\\'@nativescript/core/bundle-entry-points\\\\')\\\\nconst context = require.context(\\"~/\\", /* deep: */ true, /* filter: */ /\\\\\\\\.(xml|js|(?<!\\\\\\\\.d\\\\\\\\.)ts|s?css)$/);\\\\nglobal.registerWebpackModules(context);\\\\n// VIRTUAL ENTRY END'
}
),
/* config.plugin('ContextExclusionPlugin|exclude_files') */
new ContextExclusionPlugin(
/\\\\b_.+\\\\./
@ -650,7 +630,7 @@ exports[`typescript configuration for ios 1`] = `
entry: {
bundle: [
'@nativescript/core/globals/index',
'__jest__/src/__@nativescript_webpack_virtual_entry_typescript__',
'__jest__/node_modules/@nativescript/webpack/dist/stubs/virtual-entry-typescript.js',
'@nativescript/core/bundle-entry-points',
'__jest__/src/app.js'
],

View File

@ -1,4 +1,6 @@
import Config from 'webpack-chain';
import path from 'path';
import fs from 'fs';
import typescript from '../../src/configuration/typescript';
import { init } from '../../src';
@ -15,29 +17,30 @@ describe('typescript configuration', () => {
});
}
it('filter typescript declaration files', () => {
it('filters typescript declaration files', () => {
init({
ios: true,
});
const tsConfig = typescript(new Config());
// const tsConfig = typescript(new Config());
let regex: RegExp;
// Get the filterRE from the typescript configuration
tsConfig.plugin('VirtualModulesPlugin').tap((args) => {
const options = args[0];
const virtualConfig: string = options[Object.keys(options)[0]];
const filterLine = virtualConfig
.split('\n')
.find((v) => v.includes('filter'));
const matches = filterLine.match(/\/(?<filter>\S+)\//);
const virtualEntryPath = path.join(
__dirname,
'../../src/stubs/virtual-entry-typescript.js'
);
const virtualEntry = fs.readFileSync(virtualEntryPath);
if (matches) {
regex = new RegExp(matches.groups.filter);
}
const filterLine = virtualEntry
.toString()
.split('\n')
.find((v) => v.includes('filter'));
return args;
});
const matches = filterLine.match(/\/(?<filter>\S+)\//);
if (matches) {
regex = new RegExp(matches.groups.filter);
}
expect(regex).toBeDefined();

View File

@ -1,26 +1,18 @@
import Config from 'webpack-chain';
import { getEntryPath, getEntryDirPath } from '../helpers/platform';
import { addVirtualEntry } from '../helpers/virtualModules';
import { chainedSetAddAfter } from '../helpers/chain';
import { env as _env, IWebpackEnv } from '../index';
import { ContextExclusionPlugin } from 'webpack';
import base from './base';
import path from 'path';
export default function (config: Config, env: IWebpackEnv = _env): Config {
base(config, env);
const entryPath = getEntryPath();
const filterRE = '/.(xml|js|s?css)$/';
const virtualEntryPath = addVirtualEntry(
config,
'javascript',
`
// VIRTUAL ENTRY START
require('@nativescript/core/bundle-entry-points')
const context = require.context("~/", /* deep: */ true, /* filter: */ ${filterRE});
global.registerWebpackModules(context);
// VIRTUAL ENTRY END
`
const virtualEntryPath = path.resolve(
__dirname,
'../stubs/virtual-entry-javascript'
);
// exclude files starting with _ from require.context

View File

@ -1,26 +1,18 @@
import Config from 'webpack-chain';
import { getEntryDirPath, getEntryPath } from '../helpers/platform';
import { addVirtualEntry } from '../helpers/virtualModules';
import { chainedSetAddAfter } from '../helpers/chain';
import { env as _env, IWebpackEnv } from '../index';
import { ContextExclusionPlugin } from 'webpack';
import base from './base';
import path from 'path';
export default function (config: Config, env: IWebpackEnv = _env): Config {
base(config, env);
const entryPath = getEntryPath();
const filterRE = '/\\.(xml|js|(?<!\\.d\\.)ts|s?css)$/';
const virtualEntryPath = addVirtualEntry(
config,
'typescript',
`
// VIRTUAL ENTRY START
require('@nativescript/core/bundle-entry-points')
const context = require.context("~/", /* deep: */ true, /* filter: */ ${filterRE});
global.registerWebpackModules(context);
// VIRTUAL ENTRY END
`
const virtualEntryPath = path.resolve(
__dirname,
'../stubs/virtual-entry-typescript.js'
);
// exclude files starting with _ from require.context

View File

@ -8,6 +8,9 @@ import { getEntryDirPath } from './platform';
import dedent from 'ts-dedent';
import { getProjectFilePath } from './project';
/**
* @deprecated Virtual entries are not recommended by the webpack team, use real files instead. For example, resolve a path in node_modules if necessary.
*/
export function addVirtualEntry(
config: Config,
name: string,
@ -20,6 +23,9 @@ export function addVirtualEntry(
);
}
/**
* @deprecated Virtual modules are not recommended by the webpack team, use real files instead. For example, resolve a path in node_modules if necessary.
*/
export function addVirtualModule(
config: Config,
name: string,

View File

@ -0,0 +1,5 @@
// VIRTUAL ENTRY START
require('@nativescript/core/bundle-entry-points')
const context = require.context("~/", /* deep: */ true, /* filter: */ /.(xml|js|s?css)$/);
global.registerWebpackModules(context);
// VIRTUAL ENTRY END

View File

@ -0,0 +1,5 @@
// VIRTUAL ENTRY START
require('@nativescript/core/bundle-entry-points')
const context = require.context("~/", /* deep: */ true, /* filter: */ /\.(xml|js|(?<!\.d\.)ts|s?css)$/);
global.registerWebpackModules(context);
// VIRTUAL ENTRY END