mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
refactor(webpack): use real modules and deprecate virtual modules
This commit is contained in:

committed by
Nathan Walker

parent
2fbc1898db
commit
0556cf9b20
@ -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'
|
||||
],
|
||||
|
@ -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'
|
||||
],
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
5
packages/webpack5/src/stubs/virtual-entry-javascript.js
Normal file
5
packages/webpack5/src/stubs/virtual-entry-javascript.js
Normal 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
|
5
packages/webpack5/src/stubs/virtual-entry-typescript.js
Normal file
5
packages/webpack5/src/stubs/virtual-entry-typescript.js
Normal 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
|
Reference in New Issue
Block a user