index.js 1.5 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2 3 4 5
const path = require('path')
const glob = require('glob')
const transformFile = require('./file-transformer')

function generateVueFile(input, out, options) {
fxy060608's avatar
fxy060608 已提交
6
  const [content, deps] = transformFile(input, options)
fxy060608's avatar
fxy060608 已提交
7
  return {
fxy060608's avatar
fxy060608 已提交
8 9 10
    path: path.resolve(out, path.basename(input).replace(options.extname.template, '.vue')),
    content,
    deps
fxy060608's avatar
fxy060608 已提交
11 12 13 14
  }
}

function generateVueFolder(input, out, options) {
fxy060608's avatar
fxy060608 已提交
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
  const extname = options.extname.template
  const files = []
  const assets = []
  const deps = []
  glob.sync('**/*', {
    cwd: input,
    nodir: true
  }).map(file => {
    if (path.extname(file) === extname) {
      const vueFile = generateVueFile(
        path.resolve(input, file),
        path.dirname(path.resolve(out, file)),
        options
      )
      files.push(vueFile)
      deps.push(...vueFile.deps)
    } else {
      assets.push(file)
    }
fxy060608's avatar
fxy060608 已提交
34
  })
fxy060608's avatar
fxy060608 已提交
35 36 37
  return [files, assets.filter(asset => {
    return !deps.includes(path.resolve(input, asset))
  })]
fxy060608's avatar
fxy060608 已提交
38 39 40 41
}

function generateVueApp(input, out, options) {
  console.error(`暂不支持转换整个 App`)
fxy060608's avatar
fxy060608 已提交
42 43 44 45
  return [
    [],
    []
  ]
fxy060608's avatar
fxy060608 已提交
46 47 48 49 50
}

module.exports = function transform(input, out, options) {
  switch (options.target) {
    case 'file':
fxy060608's avatar
fxy060608 已提交
51 52 53 54
      return [
        [generateVueFile(input, out, options)],
        []
      ]
fxy060608's avatar
fxy060608 已提交
55
    case 'folder':
fxy060608's avatar
fxy060608 已提交
56
      return generateVueFolder(input, out, options)
fxy060608's avatar
fxy060608 已提交
57
    case 'app':
fxy060608's avatar
fxy060608 已提交
58
      return generateVueApp(input, out, options)
fxy060608's avatar
fxy060608 已提交
59
  }
fxy060608's avatar
fxy060608 已提交
60 61 62 63
  return [
    [],
    []
  ]
fxy060608's avatar
fxy060608 已提交
64
}