From aaae99e7cda62ed03659469cb83aa3af4baacdc8 Mon Sep 17 00:00:00 2001 From: Jean Lauliac Date: Wed, 16 Aug 2017 04:26:31 -0700 Subject: [PATCH] metro-bundler: transform import() to basic require() Reviewed By: mjesun Differential Revision: D5631078 fbshipit-source-id: a8d4955a723c1846b9406e734c3e3fa2c0df3fb7 --- babel-preset/configs/main.js | 4 ++- babel-preset/package.json | 1 + .../transforms/transform-dynamic-import.js | 32 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 babel-preset/transforms/transform-dynamic-import.js diff --git a/babel-preset/configs/main.js b/babel-preset/configs/main.js index fc3186e4d..c2f4d483e 100644 --- a/babel-preset/configs/main.js +++ b/babel-preset/configs/main.js @@ -21,7 +21,6 @@ const getPreset = (src, options) => { plugins.push( 'syntax-class-properties', - 'syntax-dynamic-import', 'syntax-trailing-function-commas', 'transform-class-properties', 'transform-es2015-block-scoping', @@ -76,6 +75,9 @@ const getPreset = (src, options) => { ) { plugins.push('transform-react-display-name'); } + if (isNull || src.indexOf('import(')) { + plugins.push(require('../transforms/transform-dynamic-import')); + } if (options && options.dev) { plugins.push('transform-react-jsx-source'); diff --git a/babel-preset/package.json b/babel-preset/package.json index c4d4b0f22..ad4088172 100644 --- a/babel-preset/package.json +++ b/babel-preset/package.json @@ -44,6 +44,7 @@ "babel-plugin-transform-react-jsx-source": "^6.5.0", "babel-plugin-transform-react-jsx": "^6.5.0", "babel-plugin-transform-regenerator": "^6.5.0", + "babel-template": "^6.24.1", "react-transform-hmr": "^1.0.4" } } diff --git a/babel-preset/transforms/transform-dynamic-import.js b/babel-preset/transforms/transform-dynamic-import.js new file mode 100644 index 000000000..a402f6bb7 --- /dev/null +++ b/babel-preset/transforms/transform-dynamic-import.js @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2016-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +'use strict'; + +const template = require('babel-template'); + +const buildImport = template('Promise.resolve().then(() => require(ARGS))'); + +const TYPE_IMPORT = 'Import'; + +const plugin = { + inherits: require('babel-plugin-syntax-dynamic-import'), + + visitor: { + CallExpression(path) { + if (path.node.callee.type !== TYPE_IMPORT) { + return; + } + const newImport = buildImport({ARGS: path.node.arguments}); + path.replaceWith(newImport); + }, + }, +}; + +module.exports = plugin;