From cc221698d4dcd482a86e6444fdb23adc74c071c9 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Mon, 2 Dec 2019 15:14:23 +0800 Subject: [PATCH] refactor(v3): uni-migration --- packages/uni-migration/__tests__/demo.js | 4 ++- packages/uni-migration/lib/index.js | 33 ++++++++++++++++--- .../mp-weixin/transform/file-transformer.js | 13 +++++--- .../lib/mp-weixin/transform/index.js | 16 +++++++-- .../mp-weixin/transform/json-transformer.js | 22 +++++++++---- .../mp-weixin/transform/script-transformer.js | 10 +++--- .../transform/template-transformer/index.js | 8 ++--- .../transform/generate.js | 28 +++++++++++++--- .../template-transformer/transform/index.js | 5 +-- packages/uni-migration/lib/mp-weixin/util.js | 17 +++++++++- packages/uni-mp-weixin/dist/mp.js | 19 ++++++++--- 11 files changed, 135 insertions(+), 40 deletions(-) diff --git a/packages/uni-migration/__tests__/demo.js b/packages/uni-migration/__tests__/demo.js index 6e934ae49..83fec6ba6 100644 --- a/packages/uni-migration/__tests__/demo.js +++ b/packages/uni-migration/__tests__/demo.js @@ -13,5 +13,7 @@ migrate('/Users/fxy/Downloads/wa-vantui_1.1/wxcomponents/vant', // } = require('../lib/mp-weixin/transform/template-transformer') // console.log(transformTemplate( -// `` +// `aasdf`, { +// filename: 'index' +// } // )) diff --git a/packages/uni-migration/lib/index.js b/packages/uni-migration/lib/index.js index 0ce4c3090..4f30face8 100644 --- a/packages/uni-migration/lib/index.js +++ b/packages/uni-migration/lib/index.js @@ -7,6 +7,24 @@ const migraters = { 'mp-weixin': require('./mp-weixin') } +/** + * 先简单的 hack 一下,支持 vant 的 array.wxs + * @param {Object} src + * @param {Object} dest + */ +function hackVant(src, dest) { + if (src.indexOf('array.wxs') !== -1) { + fs.outputFileSync( + dest, + fs.readFileSync(src) + .toString() + .replace(`array.constructor === 'Array'`, 'Array.isArray(array)') + ) + return true + } + return false +} + module.exports = function migrate(input, out, options = { platform: 'mp-weixin' }) { @@ -24,9 +42,16 @@ module.exports = function migrate(input, out, options = { }) 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) + if (typeof asset === 'string') { + const src = path.resolve(input, asset) + const dest = path.resolve(out, asset.replace(styleExtname, '.css')) + console.log(`copy: ${dest}`) + if (!hackVant(src, dest)) { + fs.copySync(src, dest) + } + } else { + console.log(`write: ${path.resolve(out, asset.path)}`) + fs.outputFileSync(path.resolve(out, asset.path), asset.content) + } }) } 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 05f71be7f..fb8062269 100644 --- a/packages/uni-migration/lib/mp-weixin/transform/file-transformer.js +++ b/packages/uni-migration/lib/mp-weixin/transform/file-transformer.js @@ -1,3 +1,5 @@ +const path = require('path') + const { transformJsonFile } = require('./json-transformer') @@ -23,12 +25,14 @@ module.exports = function transformFile(input, options) { filepath + templateExtname ] - const [usingComponentsCode] = transformJsonFile(filepath + '.json', deps) + const [jsCode] = transformJsonFile(filepath + '.json', deps) - const [templateCode, wxsCode = ''] = transformTemplateFile(filepath + templateExtname) + const [templateCode, wxsCode = '', wxsFiles = []] = transformTemplateFile(filepath + templateExtname, { + filename: path.basename(filepath) + }) const styleCode = transformStyleFile(filepath + styleExtname, options, deps) || '' - const scriptCode = transformScriptFile(filepath + '.js', usingComponentsCode, options, deps) + const scriptCode = transformScriptFile(filepath + '.js', jsCode, options, deps) return [ `