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
2017-04-18 01:45:50 +05:30

59 lines
1.5 KiB
JavaScript

// 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(`
(
typeof window === 'undefined' ?
{
then(cb) {
eval('require.ensure = function (deps, callback) { callback(require) }')
require.ensure([], (require) => {
let m = require(SOURCE)
m = m.default || m
m.__webpackChunkName = '${args.name}.js'
cb(m);
}, 'chunks/${args.name}.js');
},
catch() {}
} :
{
then(cb) {
const weakId = require.resolveWeak(SOURCE)
try {
const weakModule = __webpack_require__(weakId)
return cb(weakModule.default || weakModule)
} catch (err) {}
require.ensure([], (require) => {
let m = require(SOURCE)
m = m.default || m
cb(m);
}, 'chunks/${args.name}.js');
},
catch () {}
}
)
`))
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)
}
}
}
})