diff --git a/packages/hap-server/package.json b/packages/hap-server/package.json
index 761cb562..c5dcd46d 100644
--- a/packages/hap-server/package.json
+++ b/packages/hap-server/package.json
@@ -44,6 +44,7 @@
"qr-image": "^3.2.0",
"qrcode-terminal": "^0.12.0",
"request": "^2.88.2",
- "resolve": "^1.22.2"
+ "resolve": "^1.22.2",
+ "koa-proxies": "^0.12.4"
}
}
diff --git a/packages/hap-server/src/preview/create-router.js b/packages/hap-server/src/preview/create-router.js
index c5f626a6..77d6f5e5 100644
--- a/packages/hap-server/src/preview/create-router.js
+++ b/packages/hap-server/src/preview/create-router.js
@@ -228,6 +228,7 @@ export default async function createRouter(previewTarget) {
type,
script,
scriptNotFound: !scriptExists(script),
+ devtoolUrl: browerOptions.options.devtoolUrl || '',
webJsUrl: genWebJsUrl(browerOptions.options.version || ctx.conf.options.webVersion), // 更改预览版本号修改为同媒介查询一样的传参方式,同时兼容之前的方式
language: currentLanguage,
mediaQueryParams: JSON.stringify(mediaQueryParams) // 传给页面的媒介查询参数
diff --git a/packages/hap-server/src/preview/views/page.html b/packages/hap-server/src/preview/views/page.html
index 929d02c6..c5b5aa70 100644
--- a/packages/hap-server/src/preview/views/page.html
+++ b/packages/hap-server/src/preview/views/page.html
@@ -93,6 +93,11 @@
document.write('
+
diff --git a/packages/hap-server/src/server.js b/packages/hap-server/src/server.js
index 2bd8e2b3..7b803668 100644
--- a/packages/hap-server/src/server.js
+++ b/packages/hap-server/src/server.js
@@ -16,6 +16,7 @@ import {
} from '@hap-toolkit/shared-utils'
import { browerOptions } from './config'
const moduler = [require('@hap-toolkit/debugger')]
+const proxies = require('koa-proxies')
let server = null
export async function launch(conf) {
return new Promise(async (resolve) => {
@@ -25,6 +26,20 @@ export async function launch(conf) {
moduler.push((await import('@hap-toolkit/packager')).router, require('./preview/index.js'))
}
const app = new Koa()
+ // 插件方式的预览页面是iframe,快应用开发ajax请求会受同源策略限制,需要做代理转发
+ app.use(async (ctx, next) => {
+ if (ctx.request.url.startsWith('/api/proxy')) {
+ const target = ctx.request.url.split('target=')[1] // 从查询参数获取实际请求的目标地址
+ // const apiReg = new RegExp(`^${api}/`);
+ return proxies('/api/proxy', {
+ target: target,
+ changeOrigin: true,
+ logs: true,
+ rewrite: (path) => path.replace(/^\/api\/proxy/, '')
+ })(ctx, next)
+ }
+ return next()
+ })
let serverPort = globalConfig.server.port
// 如果设置的端口被占用,则自动递增获取可用端口
serverPort = await portfinder.getPortPromise({
diff --git a/packages/hap-toolkit/src/commands/compile.js b/packages/hap-toolkit/src/commands/compile.js
index 78a9e52f..028071f0 100644
--- a/packages/hap-toolkit/src/commands/compile.js
+++ b/packages/hap-toolkit/src/commands/compile.js
@@ -41,6 +41,7 @@ showVersion()
* @param {Function} [options.onerror] - 错误回调函数
* @param {String} [options.buildPreviewRpkOptions] - 预览包保存路径,由IDE传入
* @param {Object} [options.compileOptions] - 编译参数,由IDE传入
+ * @param {Object} [options.isUpdateDefine=undefined] - 执行compile是否更新webpack注入的变量,ide新建模板卡片会传入
* @param {Object} [options.ideConfig] - cli,由 IDE 传入
* @returns {Promise} - 返回成功与否的信息
*/
diff --git a/packages/hap-toolkit/src/gen-webpack-conf/helpers.js b/packages/hap-toolkit/src/gen-webpack-conf/helpers.js
index b39e5d93..8593ff7b 100644
--- a/packages/hap-toolkit/src/gen-webpack-conf/helpers.js
+++ b/packages/hap-toolkit/src/gen-webpack-conf/helpers.js
@@ -25,7 +25,17 @@ export function getConfigPath(cwd) {
} while (++index < configFileList.length)
return configPath
}
-
+/** ide新建模板执行编译获取用户配置的路径,变量可变,需要复制一份
+ * @param {String} cwd
+ */
+export function getNewTemplateConfigPath(cwd) {
+ const defaultConfig = 'quickapp.config.js'
+ const defaultConfigPath = path.join(cwd, defaultConfig)
+ const copyConfig = new Date().getTime() + '.js'
+ const copyConfigPath = path.join(cwd, copyConfig)
+ fs.copyFileSync(defaultConfigPath, copyConfigPath)
+ return copyConfigPath
+}
/**
* 清理 BUILD_DIR DIST_DIR
*/
diff --git a/packages/hap-toolkit/src/gen-webpack-conf/index.js b/packages/hap-toolkit/src/gen-webpack-conf/index.js
index d3a0e714..a31aa7a0 100644
--- a/packages/hap-toolkit/src/gen-webpack-conf/index.js
+++ b/packages/hap-toolkit/src/gen-webpack-conf/index.js
@@ -27,6 +27,7 @@ import { resolveEntries } from '../utils'
import getDevtool from './get-devtool'
import {
getConfigPath,
+ getNewTemplateConfigPath,
cleanup,
checkBuiltinModules,
setAdaptForV8Version,
@@ -64,6 +65,7 @@ const SPLIT_CHUNKS_SUPPORT_VERSION_FROM = 1080
* @param {boolean} [launchOptions.optimizeStyleAppLevel=false] - 优化 app 样式等级
* @param {boolean} [launchOptions.optimizeStylePageLevel=false] - 优化 app 样式等级
* @param {boolean} [launchOptions.splitChunksMode=undefined] - 抽取公共JS
+ * @param {boolean} [launchOptions.isUpdateDefine=undefined] - 执行compile是否更新webpack注入的变量,ide新建模板卡片会传入
* @param {Object} [options.compileOptions] - 编译参数,由IDE传入
* @param {production|development} mode - webpack mode
* @returns {WebpackConfiguration}
@@ -76,7 +78,9 @@ export default async function genWebpackConf(launchOptions, mode) {
globalConfig.projectPath = path.resolve(globalConfig.projectPath)
const cwd = globalConfig.projectPath
- const hapConfigPath = getConfigPath(cwd)
+ const hapConfigPath = launchOptions.isUpdateDefine
+ ? getNewTemplateConfigPath(cwd)
+ : getConfigPath(cwd)
// 用于接受quickapp.config.js 或者 hap.config.js中的配置
let quickappConfig
// 接受命令行
@@ -92,6 +96,10 @@ export default async function genWebpackConf(launchOptions, mode) {
colorconsole.error(`加载webpack配置文件[${hapConfigPath}]出错:${err.message}`)
}
}
+ // 获取到更新后的用户配置文件后要删除复制配置文件
+ if (launchOptions.isUpdateDefine) {
+ fs.unlinkSync(hapConfigPath)
+ }
// 接收ide命令行
if (launchOptions.ideConfig && typeof launchOptions.ideConfig.cli === 'object') {
launchOptions = Object.assign({}, launchOptions.ideConfig.cli, launchOptions)