text: const t = require('@babel/types')
  const babelTemplate = require('@babel/template').default
  
  // const buildDynamicImport = babelTemplate(`var IMPORT_NAME = ()=>import(IMPORT_SOURCE)`, {
  //   preserveComments: true,
  //   plugins: [
  //     'dynamicImport'
  //   ]
  // })
  // 已废弃，@vue/cli-plugin-babel@4 增加了 dynamic import 转换
  // var test = ()=>import(/* webpackChunkName: "components/test" */'../../components/test')
  // function getDynamicImport (name, source, chunkName) {
  //   const stringLiteral = t.stringLiteral(source)
  //   const dynamicImportComment = {
  //     type: 'CommentBlock',
  //     value: `webpackChunkName: "${chunkName}"`
  //   }
  //   stringLiteral.leadingComments = [dynamicImportComment]
  //   return buildDynamicImport({
  //     IMPORT_NAME: t.identifier(name),
  //     IMPORT_SOURCE: stringLiteral
  //   })
  // }
  // var test = function(resolve) {require.ensure([], () => resolve(require('../../components/test')),'components/test')}
  const buildRequireEnsure = babelTemplate(
    'var IMPORT_NAME = function(){require.ensure([],()=>resolve(require(IMPORT_SOURCE)),CHUNK_NAME)}'
  )
  
  function getRequireEnsure (name, source, chunkName) {
    return buildRequireEnsure({
      IMPORT_NAME: t.identifier(name),
      IMPORT_SOURCE: t.stringLiteral(source),
      CHUNK_NAME: t.stringLiteral(chunkName)
    })
  }
  
  module.exports = function ({
    types: t
  }) {
    return {
      visitor: {
        ImportDeclaration (path, state) {
          const dynamicImport = state.opts.dynamicImports[path.node.source.value]
          if (dynamicImport) {
            path.insertBefore(
              getRequireEnsure(
                path.node.specifiers[0].local.name,
                dynamicImport.source,
                dynamicImport.chunkName
              )
            )
            path.remove()
          }
        }
      }
    }
  }
  