@teambit/webpack 0.0.737 → 0.0.740
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/webpack.config.ts +0 -14
- package/dist/config/html.js.map +1 -1
- package/dist/config/webpack-fallbacks-aliases.js.map +1 -1
- package/dist/config/webpack-fallbacks-provide-plugin-config.js.map +1 -1
- package/dist/config/webpack-fallbacks.js.map +1 -1
- package/dist/config/webpack.config.d.ts +0 -1
- package/dist/config/webpack.config.js +1 -40
- package/dist/config/webpack.config.js.map +1 -1
- package/dist/config/webpack.dev.config.js.map +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/events/webpack-compilation-done-event.js.map +1 -1
- package/dist/events/webpack-compilation-started-event.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/webpack-bit-reporter-plugin.js.map +1 -1
- package/dist/transformers/get-exposed-rules.d.ts +3 -0
- package/dist/transformers/get-exposed-rules.js +74 -0
- package/dist/transformers/get-exposed-rules.js.map +1 -0
- package/dist/transformers/get-externals.d.ts +1 -0
- package/dist/transformers/get-externals.js +42 -0
- package/dist/transformers/get-externals.js.map +1 -0
- package/dist/transformers/index.d.ts +1 -0
- package/dist/transformers/index.js +28 -0
- package/dist/transformers/index.js.map +1 -1
- package/dist/transformers/inject-body.js.map +1 -1
- package/dist/transformers/resolve-peer.d.ts +14 -0
- package/dist/transformers/resolve-peer.js +110 -0
- package/dist/transformers/resolve-peer.js.map +1 -0
- package/dist/transformers/transformers.d.ts +16 -0
- package/dist/transformers/transformers.js +91 -0
- package/dist/transformers/transformers.js.map +1 -0
- package/dist/webpack.aspect.js.map +1 -1
- package/dist/webpack.bundler.js.map +1 -1
- package/dist/webpack.composition.js.map +1 -1
- package/dist/webpack.dev-server.js.map +1 -1
- package/dist/webpack.main.runtime.d.ts +3 -2
- package/dist/webpack.main.runtime.js +43 -5
- package/dist/webpack.main.runtime.js.map +1 -1
- package/package-tar/teambit-webpack-0.0.740.tgz +0 -0
- package/package.json +16 -11
- package/{preview-1652930732694.js → preview-1653449228788.js} +2 -2
- package/transformers/get-exposed-rules.ts +19 -0
- package/transformers/get-externals.ts +8 -0
- package/transformers/index.ts +5 -0
- package/transformers/resolve-peer.ts +63 -0
- package/transformers/transformers.ts +52 -0
- package/package-tar/teambit-webpack-0.0.737.tgz +0 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import fs, { realpathSync } from 'fs';
|
|
2
|
+
import { ResolverFactory, CachedInputFileSystem } from 'enhanced-resolve';
|
|
3
|
+
import findRoot from 'find-root';
|
|
4
|
+
import { Logger } from '@teambit/logger';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Get the package folder, and in case it's not found get the resolved file path
|
|
8
|
+
* @param peerName
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
export function resolvePeerToDirOrFile(peerName: string, logger: Logger, hostRootDir?: string): string | undefined {
|
|
12
|
+
let resolved;
|
|
13
|
+
try {
|
|
14
|
+
const options = {
|
|
15
|
+
// resolve the host root dir to its real location, as require.resolve is preserve symlink, so we get wrong result otherwise
|
|
16
|
+
paths: [process.cwd(), __dirname],
|
|
17
|
+
};
|
|
18
|
+
if (hostRootDir) {
|
|
19
|
+
// resolve the host root dir to its real location, as require.resolve is preserve symlink, so we get wrong result otherwise
|
|
20
|
+
options.paths.unshift(realpathSync(hostRootDir));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
resolved = require.resolve(peerName, options);
|
|
24
|
+
const folder = findRoot(resolved);
|
|
25
|
+
return folder;
|
|
26
|
+
} catch (e) {
|
|
27
|
+
if (resolved) {
|
|
28
|
+
logger.warn(`Couldn't find root dir for "${peerName}" from path "${resolved}" to add it as webpack alias`);
|
|
29
|
+
} else {
|
|
30
|
+
logger.warn(`Couldn't resolve "${peerName}" to add it as webpack alias`);
|
|
31
|
+
}
|
|
32
|
+
return resolved;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Make sure to resolve the peer path correctly
|
|
38
|
+
* we first resolve it to its dir (to be aligned with the aliases transformer)
|
|
39
|
+
* Then we resolve it to specific file, using enhanced resolve to make sure we resolve it using the correct main fields order
|
|
40
|
+
* @param peer
|
|
41
|
+
*/
|
|
42
|
+
export function resolvePeerToFile(peer: string, logger: Logger, hostRootDir?: string): string | undefined {
|
|
43
|
+
const dirOrFile = resolvePeerToDirOrFile(peer, logger, hostRootDir);
|
|
44
|
+
if (!dirOrFile) return undefined;
|
|
45
|
+
const resolver = createResolver();
|
|
46
|
+
const resolvedFile = resolver.resolveSync({}, '', dirOrFile);
|
|
47
|
+
return resolvedFile;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Generate a resolver that will read first the module field then the main field
|
|
52
|
+
* to make it compatible with webpack behavior
|
|
53
|
+
* @returns
|
|
54
|
+
*/
|
|
55
|
+
function createResolver() {
|
|
56
|
+
// create a resolver
|
|
57
|
+
const myResolver = ResolverFactory.createResolver({
|
|
58
|
+
fileSystem: new CachedInputFileSystem(fs, 4000),
|
|
59
|
+
useSyncFileSystemCalls: true,
|
|
60
|
+
mainFields: ['module', 'main'],
|
|
61
|
+
});
|
|
62
|
+
return myResolver;
|
|
63
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { WebpackConfigTransformContext } from '@teambit/webpack';
|
|
2
|
+
import { WebpackConfigMutator } from '@teambit/webpack.modules.config-mutator';
|
|
3
|
+
import { Logger } from '@teambit/logger';
|
|
4
|
+
import { getExposedRules } from './get-exposed-rules';
|
|
5
|
+
import { resolvePeerToDirOrFile } from './resolve-peer';
|
|
6
|
+
import { getExternals } from './get-externals';
|
|
7
|
+
|
|
8
|
+
export function generateAddAliasesFromPeersTransformer(peers: string[], logger: Logger) {
|
|
9
|
+
return (config: WebpackConfigMutator, context: WebpackConfigTransformContext): WebpackConfigMutator => {
|
|
10
|
+
const peerAliases = peers.reduce((acc, peerName) => {
|
|
11
|
+
// gets the correct module folder of the package.
|
|
12
|
+
// this allows us to resolve internal files, for example:
|
|
13
|
+
// node_modules/react-dom/test-utils
|
|
14
|
+
//
|
|
15
|
+
// we can't use require.resolve() because it resolves to a specific file.
|
|
16
|
+
// for example, if we used "react-dom": require.resolve("react-dom"),
|
|
17
|
+
// it would try to resolve "react-dom/test-utils" as:
|
|
18
|
+
// node_modules/react-dom/index.js/test-utils
|
|
19
|
+
acc[peerName] = resolvePeerToDirOrFile(peerName, logger, context.target?.hostRootDir);
|
|
20
|
+
return acc;
|
|
21
|
+
}, {});
|
|
22
|
+
|
|
23
|
+
config.addAliases(peerAliases);
|
|
24
|
+
return config;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Generate a transformer that expose all the peers as global via the expose loader
|
|
30
|
+
* @param peers
|
|
31
|
+
* @returns
|
|
32
|
+
*/
|
|
33
|
+
export function generateExposePeersTransformer(peers: string[], logger: Logger) {
|
|
34
|
+
return (config: WebpackConfigMutator, context: WebpackConfigTransformContext): WebpackConfigMutator => {
|
|
35
|
+
const exposedRules = getExposedRules(peers, logger, context.target?.hostRootDir);
|
|
36
|
+
config.addModuleRules(exposedRules);
|
|
37
|
+
return config;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Generate a transformer that expose all the peers as global via the expose loader
|
|
43
|
+
* @param peers
|
|
44
|
+
* @returns
|
|
45
|
+
*/
|
|
46
|
+
export function generateExternalsTransformer(depes: string[]) {
|
|
47
|
+
return (config: WebpackConfigMutator): WebpackConfigMutator => {
|
|
48
|
+
const externals = getExternals(depes);
|
|
49
|
+
config.addExternals(externals);
|
|
50
|
+
return config;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
Binary file
|