diff --git a/packages/uni-migration/__tests__/demo.js b/packages/uni-migration/__tests__/demo.js index c0d4cc08e3ad2486fd7cb6d46dea6aa27fdfbdb1..6e934ae49e1b55d327f8007882d1c551df1a554b 100644 --- a/packages/uni-migration/__tests__/demo.js +++ b/packages/uni-migration/__tests__/demo.js @@ -1,4 +1,17 @@ const migrate = require('../lib/index') -migrate('/Users/fxy/Documents/demo/my-v3-mp/src/wxcomponents', - '/Users/fxy/Documents/demo/my-v3-mp/src/wxcomponents-vue') +migrate('/Users/fxy/Downloads/wa-vantui_1.1/wxcomponents/vant', + '/Users/fxy/Downloads/wa-vantui_1.1/vant') + +// const { +// parse +// } = require('mustache') +// console.log(parse('{{ !item.loading }}')) + +// const { +// transformTemplate +// } = require('../lib/mp-weixin/transform/template-transformer') + +// console.log(transformTemplate( +// `` +// )) diff --git a/packages/uni-migration/__tests__/wxml.spec.js b/packages/uni-migration/__tests__/wxml.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..5789471ad7c398b274075d463eacc5b0afde757a --- /dev/null +++ b/packages/uni-migration/__tests__/wxml.spec.js @@ -0,0 +1,39 @@ +const { + transformTemplate +} = require('../lib/mp-weixin/transform/template-transformer') + +function assertCodegen(wxmlCode, vueCode) { + expect(transformTemplate(wxmlCode)[0]).toBe(vueCode) +} +describe('wxml:compiler', () => { + it('generate v-if', () => { + assertCodegen( + '{{ item.name }}', + `{{ item.name }}` + ) + }) + it('generate v-for', () => { + assertCodegen( + '', + `` + ) + }) + it('generate root element', () => { + assertCodegen( + '', + `` + ) + + assertCodegen( + ` +`, + `` + ) + + + assertCodegen( + '', + `` + ) + }) +}) diff --git a/packages/uni-migration/lib/index.js b/packages/uni-migration/lib/index.js index 1cd004a0ef16b7f49052b89286585897b84d87e4..0ce4c3090d865a6aece1b679ee6534769598b1f6 100644 --- a/packages/uni-migration/lib/index.js +++ b/packages/uni-migration/lib/index.js @@ -1,4 +1,6 @@ +const path = require('path') const fs = require('fs-extra') + const validate = require('./validate') const migraters = { @@ -15,9 +17,16 @@ module.exports = function migrate(input, out, options = { if (!validate(input, out, options)) { return } - migrater.transform(input, out, options).forEach(file => { - console.log(`写入: ${file.path}`) - console.log(`${file.content}`) - // fs.outputFileSync(file.path, file.content) + const [files, assets] = migrater.transform(input, out, options) + files.forEach(file => { + console.log(`write: ${file.path}`) + fs.outputFileSync(file.path, file.content) + }) + const styleExtname = options.extname.style + assets.forEach(asset => { + const src = path.resolve(input, asset) + const dest = path.resolve(out, asset.replace(styleExtname, '.css')) + console.log(`copy: ${dest}`) + fs.copySync(src, dest) }) } diff --git a/packages/uni-migration/lib/mp-weixin/index.js b/packages/uni-migration/lib/mp-weixin/index.js index cc21afbdf0fdd0e86cf3788c27e86f9eb10dd378..d04a23d5331194123d94fee8dc6d905c72fa71e4 100644 --- a/packages/uni-migration/lib/mp-weixin/index.js +++ b/packages/uni-migration/lib/mp-weixin/index.js @@ -1,7 +1,8 @@ module.exports = { options: { - file: { - extname: '.wxml' + extname: { + template: '.wxml', + style: '.wxss' } }, transform: require('./transform') diff --git a/packages/uni-migration/lib/mp-weixin/transform/file-transformer.js b/packages/uni-migration/lib/mp-weixin/transform/file-transformer.js index 63e85ee782aecd5671518a14da5b76977e02708e..05f71be7ff82abb0806ab0e11b0a6270bc11e0ba 100644 --- a/packages/uni-migration/lib/mp-weixin/transform/file-transformer.js +++ b/packages/uni-migration/lib/mp-weixin/transform/file-transformer.js @@ -1,20 +1,37 @@ -const transformJson = require('./json-transformer') -const transformWxml = require('./wxml-transformer') -const transformWxss = require('./wxss-transformer') -const transformJs = require('./js-transformer') +const { + transformJsonFile +} = require('./json-transformer') +const { + transformTemplateFile +} = require('./template-transformer') +const { + transformStyleFile +} = require('./style-transformer') +const { + transformScriptFile +} = require('./script-transformer') -module.exports = function transformFile(input, out, options) { - const filepath = input.replace('.wxml', '') +module.exports = function transformFile(input, options) { - const [usingComponentsCode] = transformJson(filepath + '.json') + const { + template: templateExtname, + style: styleExtname + } = options.extname - const [templateCode, wxsCode = ''] = transformWxml(filepath + '.wxml') + const filepath = input.replace(templateExtname, '') + const deps = [ + filepath + templateExtname + ] - const styleCode = transformWxss(filepath + '.wxss') || '' - const scriptCode = transformJs(filepath + '.js', usingComponentsCode, options) + const [usingComponentsCode] = transformJsonFile(filepath + '.json', deps) - return ` -