1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00
next.js/server/build/babel/plugins/handle-import.js

42 lines
998 B
JavaScript
Raw Normal View History

2017-04-17 15:33:40 +00:00
// Based on https://github.com/airbnb/babel-plugin-dynamic-import-webpack
// We've added support for SSR with this version
import template from 'babel-template'
import syntax from 'babel-plugin-syntax-dynamic-import'
import UUID from 'uuid'
const TYPE_IMPORT = 'Import'
const buildImport = (args) => (template(`
(
new Promise((resolve) => {
if (process.pid) {
eval('require.ensure = (deps, callback) => (callback(require))')
}
require.ensure([], (require) => {
let m = require(SOURCE)
m = m.default || m
m.__webpackChunkName = '${args.name}.js'
resolve(m);
}, 'chunks/${args.name}.js');
})
)
`))
export default () => ({
inherits: syntax,
visitor: {
CallExpression (path) {
if (path.node.callee.type === TYPE_IMPORT) {
const newImport = buildImport({
name: UUID.v4()
})({
SOURCE: path.node.arguments
})
path.replaceWith(newImport)
}
}
}
})