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 = {};