diff --git a/packages/core/core/src/Parcel.js b/packages/core/core/src/Parcel.js
index bc748d31b6c..02ee4b07046 100644
--- a/packages/core/core/src/Parcel.js
+++ b/packages/core/core/src/Parcel.js
@@ -164,7 +164,6 @@ export default class Parcel {
this.#disposable.dispose(),
await this.#requestTracker.writeToCache(),
]);
- await this.#farm.callAllWorkers('clearConfigCache', []);
}
async _startNextBuild(): Promise {
@@ -359,6 +358,8 @@ export default class Parcel {
if (this.isProfiling) {
await this.stopProfiling();
}
+
+ await this.#farm.callAllWorkers('clearConfigCache', []);
}
}
diff --git a/packages/core/core/src/public/Environment.js b/packages/core/core/src/public/Environment.js
index 16e27070aea..4782de5ad46 100644
--- a/packages/core/core/src/public/Environment.js
+++ b/packages/core/core/src/public/Environment.js
@@ -57,13 +57,15 @@ const supportData = {
edge: '16',
firefox: '60',
chrome: '61',
- safari: '11',
+ safari: '10.1',
opera: '48',
- ios: '11',
+ ios: '10.3',
android: '76',
and_chr: '76',
and_ff: '68',
samsung: '8.2',
+ and_qq: '10.4',
+ op_mob: '64',
},
'dynamic-import': {
edge: '76',
@@ -76,6 +78,8 @@ const supportData = {
and_chr: '63',
and_ff: '67',
samsung: '8',
+ and_qq: '10.4',
+ op_mob: '64',
},
'worker-module': {
edge: '80',
@@ -98,6 +102,8 @@ const supportData = {
and_chr: '64',
and_ff: '62',
samsung: '9.2',
+ and_qq: '10.4',
+ op_mob: '64',
},
'arrow-functions': {
chrome: '47',
@@ -109,6 +115,12 @@ const supportData = {
ios: '10',
samsung: '5',
electron: '0.36',
+ android: '50',
+ qq: '10.4',
+ baidu: '7.12',
+ kaios: '2.5',
+ and_qq: '12.12',
+ op_mob: '64',
},
};
diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/.eslintrc.json b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/.eslintrc.json
new file mode 100644
index 00000000000..f89e231fa93
--- /dev/null
+++ b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/.eslintrc.json
@@ -0,0 +1,6 @@
+{
+ "extends": "../.eslintrc.json",
+ "parserOptions": {
+ "sourceType": "module"
+ }
+}
\ No newline at end of file
diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/index.js b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/index.js
new file mode 100644
index 00000000000..21b5030d8ab
--- /dev/null
+++ b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/index.js
@@ -0,0 +1,4 @@
+import Foo from 'foo';
+
+export {Foo};
+export class Bar {}
diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/index.js b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/index.js
new file mode 100644
index 00000000000..14b30579450
--- /dev/null
+++ b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/index.js
@@ -0,0 +1,3 @@
+export default function Test() {
+ return
Test
+}
diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/package.json b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/package.json
new file mode 100644
index 00000000000..bde99de9287
--- /dev/null
+++ b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/package.json
@@ -0,0 +1,3 @@
+{
+ "name": "foo"
+}
diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/package.json b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/package.json
new file mode 100644
index 00000000000..8e8616ee3b0
--- /dev/null
+++ b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "parcel-test-browser-browserslist",
+ "private": true,
+ "browserslist": ["last 2 Chrome versions", "IE >= 11"]
+}
diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/yarn.lock b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/yarn.lock
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/packages/core/integration-tests/test/transpilation.js b/packages/core/integration-tests/test/transpilation.js
index 7b1c2cca574..4ee4e9a6a05 100644
--- a/packages/core/integration-tests/test/transpilation.js
+++ b/packages/core/integration-tests/test/transpilation.js
@@ -56,17 +56,26 @@ describe('transpilation', function () {
assert(modern.includes('class Bar'));
});
- it('should not transpile node_modules by default', async function () {
+ it('should transpile node_modules by default', async function () {
await bundle(
path.join(__dirname, '/integration/babel-node-modules/index.js'),
);
let file = await outputFS.readFile(path.join(distDir, 'index.js'), 'utf8');
- assert(/class \S+ \{/.test(file));
+ assert(!/class \S+ \{/.test(file));
assert(file.includes('function Bar'));
});
- it('should not compile node_modules with a source field in package.json when not symlinked', async function () {
+ it('should not support JSX in node_modules', async function () {
+ // $FlowFixMe
+ await assert.rejects(() =>
+ bundle(
+ path.join(__dirname, '/integration/babel-node-modules-jsx/index.js'),
+ ),
+ );
+ });
+
+ it('should compile node_modules with a source field in package.json when not symlinked', async function () {
await bundle(
path.join(
__dirname,
@@ -75,7 +84,7 @@ describe('transpilation', function () {
);
let file = await outputFS.readFile(path.join(distDir, 'index.js'), 'utf8');
- assert(!file.includes('function Foo'));
+ assert(file.includes('function Foo'));
assert(file.includes('function Bar'));
});
diff --git a/packages/transformers/js/src/JSTransformer.js b/packages/transformers/js/src/JSTransformer.js
index 61476bc84d7..2ba3eacfc9b 100644
--- a/packages/transformers/js/src/JSTransformer.js
+++ b/packages/transformers/js/src/JSTransformer.js
@@ -290,49 +290,47 @@ export default (new Transformer({
]);
let targets;
- if (asset.isSource) {
- if (asset.env.isElectron() && asset.env.engines.electron) {
- targets = {
- electron: semver.minVersion(asset.env.engines.electron)?.toString(),
- };
- } else if (asset.env.isBrowser() && asset.env.engines.browsers) {
- targets = {};
+ if (asset.env.isElectron() && asset.env.engines.electron) {
+ targets = {
+ electron: semver.minVersion(asset.env.engines.electron)?.toString(),
+ };
+ } else if (asset.env.isBrowser() && asset.env.engines.browsers) {
+ targets = {};
- let browsers = Array.isArray(asset.env.engines.browsers)
- ? asset.env.engines.browsers
- : [asset.env.engines.browsers];
+ let browsers = Array.isArray(asset.env.engines.browsers)
+ ? asset.env.engines.browsers
+ : [asset.env.engines.browsers];
- // If the output format is esmodule, exclude browsers
- // that support them natively so that we transpile less.
- if (asset.env.outputFormat === 'esmodule') {
- browsers = [...browsers, ...ESMODULE_BROWSERS];
- }
+ // If the output format is esmodule, exclude browsers
+ // that support them natively so that we transpile less.
+ if (asset.env.outputFormat === 'esmodule') {
+ browsers = [...browsers, ...ESMODULE_BROWSERS];
+ }
- browsers = browserslist(browsers);
- for (let browser of browsers) {
- let [name, version] = browser.split(' ');
- if (BROWSER_MAPPING.hasOwnProperty(name)) {
- name = BROWSER_MAPPING[name];
- if (!name) {
- continue;
- }
+ browsers = browserslist(browsers);
+ for (let browser of browsers) {
+ let [name, version] = browser.split(' ');
+ if (BROWSER_MAPPING.hasOwnProperty(name)) {
+ name = BROWSER_MAPPING[name];
+ if (!name) {
+ continue;
}
+ }
- let [major, minor = '0', patch = '0'] = version
- .split('-')[0]
- .split('.');
- let semverVersion = `${major}.${minor}.${patch}`;
+ let [major, minor = '0', patch = '0'] = version
+ .split('-')[0]
+ .split('.');
+ if (isNaN(major) || isNaN(minor) || isNaN(patch)) {
+ continue;
+ }
+ let semverVersion = `${major}.${minor}.${patch}`;
- if (
- targets[name] == null ||
- semver.gt(targets[name], semverVersion)
- ) {
- targets[name] = semverVersion;
- }
+ if (targets[name] == null || semver.gt(targets[name], semverVersion)) {
+ targets[name] = semverVersion;
}
- } else if (asset.env.isNode() && asset.env.engines.node) {
- targets = {node: semver.minVersion(asset.env.engines.node)?.toString()};
}
+ } else if (asset.env.isNode() && asset.env.engines.node) {
+ targets = {node: semver.minVersion(asset.env.engines.node)?.toString()};
}
let env: EnvMap = {};