@shijiu/jsview-vue 0.9.631 → 1.9.628
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dom/bin/jsview-browser-debug-dom.min.js +1 -1
- package/dom/bin/jsview-dom.min.js +1 -1
- package/dom/{target_core_revision.js → target_core_revision.mjs} +6 -6
- package/index.d.ts +1 -0
- package/index.js +1 -10
- package/loader/jsview-main.js +1 -1
- package/loader/loader.js +0 -1
- package/package.json +3 -3
- package/patches/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +17225 -2182
- package/patches/node_modules/@vue/compiler-sfc/dist/jsview-css-to-js.js +10 -12
- package/patches/node_modules/@vue/compiler-sfc/dist/jsview-style-format.js +5 -1
- package/patches/node_modules/@vue/compiler-sfc/dist/jsview-style-types.js +6 -1
- package/patches/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +6972 -7050
- package/patches/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js +221 -117
- package/patches/node_modules/postcss-js/objectifier.js +4 -4
- package/samples/Basic/App.vue +2 -2
- package/samples/Basic/components/FontStyle.css +1 -1
- package/samples/Basic/components/anim/AnimGroup.vue +4 -4
- package/samples/Basic/components/div/DivGroup1.vue +4 -4
- package/samples/Basic/components/div/DivGroup2.vue +5 -5
- package/samples/Basic/components/img/ImageGroup.vue +2 -2
- package/samples/Basic/components/panel/Panel1.vue +6 -6
- package/samples/Basic/components/panel/Panel2.vue +2 -2
- package/samples/Basic/components/text/TextGroup1.vue +4 -4
- package/samples/Basic/components/text/TextGroup2.vue +2 -2
- package/samples/Basic/components/text/TextOverflow.vue +2 -2
- package/samples/DemoHomepage/App.vue +1 -1
- package/samples/DemoHomepage/components/BodyFrame.vue +0 -2
- package/samples/DemoHomepage/router.js +36 -51
- package/samples/DemoHomepage/views/Homepage.vue +9 -5
- package/samples/HashHistory/router.js +6 -6
- package/samples/Input/App.vue +17 -8
- package/samples/Input/InputPanel.vue +11 -18
- package/samples/MetroWidgetDemos/PingPong/App.vue +3 -3
- package/samples/MetroWidgetDemos/PingPong/AppPage.vue +2 -17
- package/samples/MetroWidgetDemos/PingPong/AppTab.vue +10 -3
- package/samples/MetroWidgetDemos/PingPong/{TabItem.vue → Item.vue} +10 -2
- package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +2 -2
- package/samples/Preload/App.vue +11 -16
- package/samples/SprayView/App.vue +2 -2
- package/samples/TextureAnimation/App2.vue +14 -42
- package/samples/VideoDemo/App.vue +2 -2
- package/samples/VisibleSensorDemo/App.vue +25 -92
- package/scripts/jsview-post-install.js +5 -5
- package/scripts/jsview-run-android.js +12 -11
- package/utils/JsViewEngineWidget/JsvFocusBlock.vue +56 -52
- package/utils/JsViewEngineWidget/JsvFocusManager.js +1 -1
- package/utils/JsViewPlugin/JsvPlayer/JsvMedia.js +2 -36
- package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +0 -14
- package/utils/JsViewPlugin/JsvPlayer/index.js +1 -8
- package/utils/JsViewPlugin/JsvPlayer/version.js +4 -4
- package/utils/JsViewVueTools/JsvHashHistory.js +12 -12
- package/utils/JsViewVueTools/index.d.ts +5 -1
- package/utils/JsViewVueTools/index.js +1 -2
- package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserPreload.vue +1 -11
- package/utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue +2 -2
- package/utils/JsViewVueWidget/JsvInput/Cursor.vue +2 -4
- package/utils/JsViewVueWidget/JsvInput/JsvInput.vue +12 -13
- package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +41 -37
- package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +8 -1
- package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +1 -1
- package/utils/index.d.ts +3 -0
- package/utils/index.js +10 -0
- package/dom/jsv-browser-debug-dom.js_1 +0 -8
- package/dom/jsv-dom.js_1 +0 -6
- package/dom/jsv-forge-define.js_1 +0 -6
- package/patches/node_modules/@babel/preset-env/lib/available-plugins.js +0 -219
- package/patches/node_modules/@vue/cli-plugin-typescript/index.js +0 -100
- package/patches/node_modules/@vue/cli-service/lib/commands/serve.js +0 -395
- package/patches/node_modules/@vue/cli-service/lib/config/app.js +0 -272
- package/patches/node_modules/@vue/cli-service/lib/config/assets.js +0 -70
- package/patches/node_modules/@vue/cli-service/lib/config/base.js +0 -212
- package/patches/node_modules/vue-loader/dist/resolveScript.js +0 -70
- package/samples/Collision/App.vue +0 -452
- package/samples/ImpactStop/App.vue +0 -435
- package/samples/TextureAnimation/assets/light.png +0 -0
- package/samples/TextureAnimation/assets/light2.png +0 -0
- package/utils/JsViewVueTools/JsvImpactTracer.js +0 -113
|
@@ -1,395 +0,0 @@
|
|
|
1
|
-
const {
|
|
2
|
-
info,
|
|
3
|
-
error,
|
|
4
|
-
hasProjectYarn,
|
|
5
|
-
hasProjectPnpm,
|
|
6
|
-
openBrowser,
|
|
7
|
-
IpcMessenger
|
|
8
|
-
} = require('@vue/cli-shared-utils')
|
|
9
|
-
|
|
10
|
-
const defaults = {
|
|
11
|
-
host: '0.0.0.0',
|
|
12
|
-
port: 8080,
|
|
13
|
-
https: false
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/** @type {import('@vue/cli-service').ServicePlugin} */
|
|
17
|
-
module.exports = (api, options) => {
|
|
18
|
-
api.registerCommand('serve', {
|
|
19
|
-
description: 'start development server',
|
|
20
|
-
usage: 'vue-cli-service serve [options] [entry]',
|
|
21
|
-
options: {
|
|
22
|
-
'--open': `open browser on server start`,
|
|
23
|
-
'--copy': `copy url to clipboard on server start`,
|
|
24
|
-
'--stdin': `close when stdin ends`,
|
|
25
|
-
'--mode': `specify env mode (default: development)`,
|
|
26
|
-
'--host': `specify host (default: ${defaults.host})`,
|
|
27
|
-
'--port': `specify port (default: ${defaults.port})`,
|
|
28
|
-
'--https': `use https (default: ${defaults.https})`,
|
|
29
|
-
'--public': `specify the public network URL for the HMR client`,
|
|
30
|
-
'--skip-plugins': `comma-separated list of plugin names to skip for this run`
|
|
31
|
-
}
|
|
32
|
-
}, async function serve (args) {
|
|
33
|
-
info('Starting development server...')
|
|
34
|
-
|
|
35
|
-
// although this is primarily a dev server, it is possible that we
|
|
36
|
-
// are running it in a mode with a production env, e.g. in E2E tests.
|
|
37
|
-
const isInContainer = checkInContainer()
|
|
38
|
-
const isProduction = process.env.NODE_ENV === 'production'
|
|
39
|
-
|
|
40
|
-
const url = require('url')
|
|
41
|
-
const { chalk } = require('@vue/cli-shared-utils')
|
|
42
|
-
const webpack = require('webpack')
|
|
43
|
-
const WebpackDevServer = require('webpack-dev-server')
|
|
44
|
-
const portfinder = require('portfinder')
|
|
45
|
-
const prepareURLs = require('../util/prepareURLs')
|
|
46
|
-
const prepareProxy = require('../util/prepareProxy')
|
|
47
|
-
const launchEditorMiddleware = require('launch-editor-middleware')
|
|
48
|
-
const validateWebpackConfig = require('../util/validateWebpackConfig')
|
|
49
|
-
const isAbsoluteUrl = require('../util/isAbsoluteUrl')
|
|
50
|
-
|
|
51
|
-
// configs that only matters for dev server
|
|
52
|
-
api.chainWebpack(webpackConfig => {
|
|
53
|
-
if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {
|
|
54
|
-
if (!webpackConfig.get('devtool')) {
|
|
55
|
-
webpackConfig
|
|
56
|
-
.devtool('eval-cheap-module-source-map')
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
webpackConfig
|
|
60
|
-
.plugin('hmr')
|
|
61
|
-
.use(require('webpack/lib/HotModuleReplacementPlugin'))
|
|
62
|
-
|
|
63
|
-
// https://github.com/webpack/webpack/issues/6642
|
|
64
|
-
// https://github.com/vuejs/vue-cli/issues/3539
|
|
65
|
-
webpackConfig
|
|
66
|
-
.output
|
|
67
|
-
.globalObject(`(typeof self !== 'undefined' ? self : this)`)
|
|
68
|
-
|
|
69
|
-
if (!process.env.VUE_CLI_TEST && options.devServer.progress !== false) {
|
|
70
|
-
webpackConfig
|
|
71
|
-
.plugin('progress')
|
|
72
|
-
.use(webpack.ProgressPlugin)
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
// resolve webpack config
|
|
78
|
-
const webpackConfig = api.resolveWebpackConfig()
|
|
79
|
-
|
|
80
|
-
// check for common config errors
|
|
81
|
-
validateWebpackConfig(webpackConfig, api, options)
|
|
82
|
-
|
|
83
|
-
// load user devServer options with higher priority than devServer
|
|
84
|
-
// in webpack config
|
|
85
|
-
const projectDevServerOptions = Object.assign(
|
|
86
|
-
webpackConfig.devServer || {},
|
|
87
|
-
options.devServer
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
// expose advanced stats
|
|
91
|
-
if (args.dashboard) {
|
|
92
|
-
const DashboardPlugin = require('../webpack/DashboardPlugin')
|
|
93
|
-
;(webpackConfig.plugins = webpackConfig.plugins || []).push(new DashboardPlugin({
|
|
94
|
-
type: 'serve'
|
|
95
|
-
}))
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// entry arg
|
|
99
|
-
const entry = args._[0]
|
|
100
|
-
if (entry) {
|
|
101
|
-
webpackConfig.entry = {
|
|
102
|
-
app: api.resolve(entry)
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// resolve server options
|
|
107
|
-
const useHttps = args.https || projectDevServerOptions.https || defaults.https
|
|
108
|
-
const protocol = useHttps ? 'https' : 'http'
|
|
109
|
-
const host = args.host || process.env.HOST || projectDevServerOptions.host || defaults.host
|
|
110
|
-
portfinder.basePort = args.port || process.env.PORT || projectDevServerOptions.port || defaults.port
|
|
111
|
-
const port = await portfinder.getPortPromise()
|
|
112
|
-
const rawPublicUrl = args.public || projectDevServerOptions.public
|
|
113
|
-
const publicUrl = rawPublicUrl
|
|
114
|
-
? /^[a-zA-Z]+:\/\//.test(rawPublicUrl)
|
|
115
|
-
? rawPublicUrl
|
|
116
|
-
: `${protocol}://${rawPublicUrl}`
|
|
117
|
-
: null
|
|
118
|
-
const publicHost = publicUrl ? /^[a-zA-Z]+:\/\/([^/?#]+)/.exec(publicUrl)[1] : undefined
|
|
119
|
-
|
|
120
|
-
const urls = prepareURLs(
|
|
121
|
-
protocol,
|
|
122
|
-
host,
|
|
123
|
-
port,
|
|
124
|
-
isAbsoluteUrl(options.publicPath) ? '/' : options.publicPath
|
|
125
|
-
)
|
|
126
|
-
const localUrlForBrowser = publicUrl || urls.localUrlForBrowser
|
|
127
|
-
|
|
128
|
-
const proxySettings = prepareProxy(
|
|
129
|
-
projectDevServerOptions.proxy,
|
|
130
|
-
api.resolve('public')
|
|
131
|
-
)
|
|
132
|
-
|
|
133
|
-
// inject dev & hot-reload middleware entries
|
|
134
|
-
if (!isProduction) {
|
|
135
|
-
const sockPath = projectDevServerOptions.sockPath || '/sockjs-node'
|
|
136
|
-
const sockjsUrl = publicUrl
|
|
137
|
-
// explicitly configured via devServer.public
|
|
138
|
-
? `?${publicUrl}&sockPath=${sockPath}`
|
|
139
|
-
: isInContainer
|
|
140
|
-
// can't infer public network url if inside a container...
|
|
141
|
-
// use client-side inference (note this would break with non-root publicPath)
|
|
142
|
-
? ``
|
|
143
|
-
// otherwise infer the url
|
|
144
|
-
: `?` + url.format({
|
|
145
|
-
protocol,
|
|
146
|
-
port,
|
|
147
|
-
hostname: urls.lanUrlForConfig || 'localhost'
|
|
148
|
-
}) + `&sockPath=${sockPath}`
|
|
149
|
-
const devClients = [
|
|
150
|
-
// dev server client
|
|
151
|
-
require.resolve(`webpack-dev-server/client`) + sockjsUrl,
|
|
152
|
-
// hmr client
|
|
153
|
-
require.resolve(projectDevServerOptions.hotOnly
|
|
154
|
-
? 'webpack/hot/only-dev-server'
|
|
155
|
-
: 'webpack/hot/dev-server')
|
|
156
|
-
// TODO custom overlay client
|
|
157
|
-
// `@vue/cli-overlay/dist/client`
|
|
158
|
-
]
|
|
159
|
-
if (process.env.APPVEYOR) {
|
|
160
|
-
devClients.push(`webpack/hot/poll?500`)
|
|
161
|
-
}
|
|
162
|
-
// inject dev/hot client
|
|
163
|
-
addDevClientToEntry(webpackConfig, devClients)
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// create compiler
|
|
167
|
-
const compiler = webpack(webpackConfig)
|
|
168
|
-
|
|
169
|
-
// handle compiler error
|
|
170
|
-
compiler.hooks.failed.tap('vue-cli-service serve', msg => {
|
|
171
|
-
error(msg)
|
|
172
|
-
process.exit(1)
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
// create server
|
|
176
|
-
const server = new WebpackDevServer(compiler, Object.assign({
|
|
177
|
-
logLevel: 'silent',
|
|
178
|
-
clientLogLevel: 'silent',
|
|
179
|
-
historyApiFallback: {
|
|
180
|
-
disableDotRule: true,
|
|
181
|
-
htmlAcceptHeaders: [
|
|
182
|
-
'text/html',
|
|
183
|
-
'application/xhtml+xml'
|
|
184
|
-
],
|
|
185
|
-
rewrites: genHistoryApiFallbackRewrites(options.publicPath, options.pages)
|
|
186
|
-
},
|
|
187
|
-
contentBase: api.resolve('public'),
|
|
188
|
-
watchContentBase: !isProduction,
|
|
189
|
-
hot: !isProduction,
|
|
190
|
-
injectClient: false,
|
|
191
|
-
compress: isProduction,
|
|
192
|
-
publicPath: options.publicPath,
|
|
193
|
-
overlay: isProduction // TODO disable this
|
|
194
|
-
? false
|
|
195
|
-
: { warnings: false, errors: true }
|
|
196
|
-
}, projectDevServerOptions, {
|
|
197
|
-
https: useHttps,
|
|
198
|
-
proxy: proxySettings,
|
|
199
|
-
public: publicHost,
|
|
200
|
-
// eslint-disable-next-line no-shadow
|
|
201
|
-
before (app, server) {
|
|
202
|
-
// launch editor support.
|
|
203
|
-
// this works with vue-devtools & @vue/cli-overlay
|
|
204
|
-
app.use('/__open-in-editor', launchEditorMiddleware(() => console.log(
|
|
205
|
-
`To specify an editor, specify the EDITOR env variable or ` +
|
|
206
|
-
`add "editor" field to your Vue project config.\n`
|
|
207
|
-
)))
|
|
208
|
-
// allow other plugins to register middlewares, e.g. PWA
|
|
209
|
-
api.service.devServerConfigFns.forEach(fn => fn(app, server))
|
|
210
|
-
// apply in project middlewares
|
|
211
|
-
projectDevServerOptions.before && projectDevServerOptions.before(app, server)
|
|
212
|
-
},
|
|
213
|
-
// avoid opening browser
|
|
214
|
-
open: false
|
|
215
|
-
}))
|
|
216
|
-
|
|
217
|
-
;['SIGINT', 'SIGTERM'].forEach(signal => {
|
|
218
|
-
process.on(signal, () => {
|
|
219
|
-
server.close(() => {
|
|
220
|
-
process.exit(0)
|
|
221
|
-
})
|
|
222
|
-
})
|
|
223
|
-
})
|
|
224
|
-
|
|
225
|
-
if (args.stdin) {
|
|
226
|
-
process.stdin.on('end', () => {
|
|
227
|
-
server.close(() => {
|
|
228
|
-
process.exit(0)
|
|
229
|
-
})
|
|
230
|
-
})
|
|
231
|
-
|
|
232
|
-
process.stdin.resume()
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// on appveyor, killing the process with SIGTERM causes execa to
|
|
236
|
-
// throw error
|
|
237
|
-
if (process.env.VUE_CLI_TEST) {
|
|
238
|
-
process.stdin.on('data', data => {
|
|
239
|
-
if (data.toString() === 'close') {
|
|
240
|
-
console.log('got close signal!')
|
|
241
|
-
server.close(() => {
|
|
242
|
-
process.exit(0)
|
|
243
|
-
})
|
|
244
|
-
}
|
|
245
|
-
})
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
return new Promise((resolve, reject) => {
|
|
249
|
-
// log instructions & open browser on first compilation complete
|
|
250
|
-
let isFirstCompile = true
|
|
251
|
-
compiler.hooks.done.tap('vue-cli-service serve', stats => {
|
|
252
|
-
if (stats.hasErrors()) {
|
|
253
|
-
return
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
let copied = ''
|
|
257
|
-
if (isFirstCompile && args.copy) {
|
|
258
|
-
try {
|
|
259
|
-
require('clipboardy').writeSync(localUrlForBrowser)
|
|
260
|
-
copied = chalk.dim('(copied to clipboard)')
|
|
261
|
-
} catch (_) {
|
|
262
|
-
/* catch exception if copy to clipboard isn't supported (e.g. WSL), see issue #3476 */
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
const networkUrl = publicUrl
|
|
267
|
-
? publicUrl.replace(/([^/])$/, '$1/')
|
|
268
|
-
: urls.lanUrlForTerminal
|
|
269
|
-
|
|
270
|
-
// JsView Added >>>>>
|
|
271
|
-
const fs = require('fs-extra')
|
|
272
|
-
const path = require('path')
|
|
273
|
-
const jsviewCacheDir = path.resolve('node_modules/.cache', 'jsview')
|
|
274
|
-
const networkFilePath = path.resolve(jsviewCacheDir, 'network')
|
|
275
|
-
fs.ensureDirSync(jsviewCacheDir);
|
|
276
|
-
fs.writeFileSync(networkFilePath, `module.exports="${networkUrl}"`)
|
|
277
|
-
// JsView Added <<<<<
|
|
278
|
-
|
|
279
|
-
console.log()
|
|
280
|
-
console.log(` App running at:`)
|
|
281
|
-
console.log(` - Local: ${chalk.cyan(urls.localUrlForTerminal)} ${copied}`)
|
|
282
|
-
if (!isInContainer) {
|
|
283
|
-
console.log(` - Network: ${chalk.cyan(networkUrl)}`)
|
|
284
|
-
} else {
|
|
285
|
-
console.log()
|
|
286
|
-
console.log(chalk.yellow(` It seems you are running Vue CLI inside a container.`))
|
|
287
|
-
if (!publicUrl && options.publicPath && options.publicPath !== '/') {
|
|
288
|
-
console.log()
|
|
289
|
-
console.log(chalk.yellow(` Since you are using a non-root publicPath, the hot-reload socket`))
|
|
290
|
-
console.log(chalk.yellow(` will not be able to infer the correct URL to connect. You should`))
|
|
291
|
-
console.log(chalk.yellow(` explicitly specify the URL via ${chalk.blue(`devServer.public`)}.`))
|
|
292
|
-
console.log()
|
|
293
|
-
}
|
|
294
|
-
console.log(chalk.yellow(` Access the dev server via ${chalk.cyan(
|
|
295
|
-
`${protocol}://localhost:<your container's external mapped port>${options.publicPath}`
|
|
296
|
-
)}`))
|
|
297
|
-
}
|
|
298
|
-
console.log()
|
|
299
|
-
|
|
300
|
-
if (isFirstCompile) {
|
|
301
|
-
isFirstCompile = false
|
|
302
|
-
|
|
303
|
-
if (!isProduction) {
|
|
304
|
-
const buildCommand = hasProjectYarn(api.getCwd()) ? `yarn build` : hasProjectPnpm(api.getCwd()) ? `pnpm run build` : `npm run build`
|
|
305
|
-
console.log(` Note that the development build is not optimized.`)
|
|
306
|
-
console.log(` To create a production build, run ${chalk.cyan(buildCommand)}.`)
|
|
307
|
-
} else {
|
|
308
|
-
console.log(` App is served in production mode.`)
|
|
309
|
-
console.log(` Note this is for preview or E2E testing only.`)
|
|
310
|
-
}
|
|
311
|
-
console.log()
|
|
312
|
-
|
|
313
|
-
if (args.open || projectDevServerOptions.open) {
|
|
314
|
-
const pageUri = (projectDevServerOptions.openPage && typeof projectDevServerOptions.openPage === 'string')
|
|
315
|
-
? projectDevServerOptions.openPage
|
|
316
|
-
: ''
|
|
317
|
-
openBrowser(localUrlForBrowser + pageUri)
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
// Send final app URL
|
|
321
|
-
if (args.dashboard) {
|
|
322
|
-
const ipc = new IpcMessenger()
|
|
323
|
-
ipc.send({
|
|
324
|
-
vueServe: {
|
|
325
|
-
url: localUrlForBrowser
|
|
326
|
-
}
|
|
327
|
-
})
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
// resolve returned Promise
|
|
331
|
-
// so other commands can do api.service.run('serve').then(...)
|
|
332
|
-
resolve({
|
|
333
|
-
server,
|
|
334
|
-
url: localUrlForBrowser
|
|
335
|
-
})
|
|
336
|
-
} else if (process.env.VUE_CLI_TEST) {
|
|
337
|
-
// signal for test to check HMR
|
|
338
|
-
console.log('App updated')
|
|
339
|
-
}
|
|
340
|
-
})
|
|
341
|
-
|
|
342
|
-
server.listen(port, host, err => {
|
|
343
|
-
if (err) {
|
|
344
|
-
reject(err)
|
|
345
|
-
}
|
|
346
|
-
})
|
|
347
|
-
})
|
|
348
|
-
})
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
function addDevClientToEntry (config, devClient) {
|
|
352
|
-
const { entry } = config
|
|
353
|
-
if (typeof entry === 'object' && !Array.isArray(entry)) {
|
|
354
|
-
Object.keys(entry).forEach((key) => {
|
|
355
|
-
entry[key] = devClient.concat(entry[key])
|
|
356
|
-
})
|
|
357
|
-
} else if (typeof entry === 'function') {
|
|
358
|
-
config.entry = entry(devClient)
|
|
359
|
-
} else {
|
|
360
|
-
config.entry = devClient.concat(entry)
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
// https://stackoverflow.com/a/20012536
|
|
365
|
-
function checkInContainer () {
|
|
366
|
-
if ('CODESANDBOX_SSE' in process.env) {
|
|
367
|
-
return true
|
|
368
|
-
}
|
|
369
|
-
const fs = require('fs')
|
|
370
|
-
if (fs.existsSync(`/proc/1/cgroup`)) {
|
|
371
|
-
const content = fs.readFileSync(`/proc/1/cgroup`, 'utf-8')
|
|
372
|
-
return /:\/(lxc|docker|kubepods(\.slice)?)\//.test(content)
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
function genHistoryApiFallbackRewrites (baseUrl, pages = {}) {
|
|
377
|
-
const path = require('path')
|
|
378
|
-
const multiPageRewrites = Object
|
|
379
|
-
.keys(pages)
|
|
380
|
-
// sort by length in reversed order to avoid overrides
|
|
381
|
-
// eg. 'page11' should appear in front of 'page1'
|
|
382
|
-
.sort((a, b) => b.length - a.length)
|
|
383
|
-
.map(name => ({
|
|
384
|
-
from: new RegExp(`^/${name}`),
|
|
385
|
-
to: path.posix.join(baseUrl, pages[name].filename || `${name}.html`)
|
|
386
|
-
}))
|
|
387
|
-
return [
|
|
388
|
-
...multiPageRewrites,
|
|
389
|
-
{ from: /./, to: path.posix.join(baseUrl, 'index.html') }
|
|
390
|
-
]
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
module.exports.defaultModes = {
|
|
394
|
-
serve: 'development'
|
|
395
|
-
}
|
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
// config that are specific to --target app
|
|
2
|
-
const fs = require('fs')
|
|
3
|
-
const path = require('path')
|
|
4
|
-
|
|
5
|
-
// ensure the filename passed to html-webpack-plugin is a relative path
|
|
6
|
-
// because it cannot correctly handle absolute paths
|
|
7
|
-
function ensureRelative (outputDir, _path) {
|
|
8
|
-
if (path.isAbsolute(_path)) {
|
|
9
|
-
return path.relative(outputDir, _path)
|
|
10
|
-
} else {
|
|
11
|
-
return _path
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
module.exports = (api, options) => {
|
|
16
|
-
api.chainWebpack(webpackConfig => {
|
|
17
|
-
// only apply when there's no alternative target
|
|
18
|
-
if (process.env.VUE_CLI_BUILD_TARGET && process.env.VUE_CLI_BUILD_TARGET !== 'app') {
|
|
19
|
-
return
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const isProd = process.env.NODE_ENV === 'production'
|
|
23
|
-
const isLegacyBundle = process.env.VUE_CLI_MODERN_MODE && !process.env.VUE_CLI_MODERN_BUILD
|
|
24
|
-
const outputDir = api.resolve(options.outputDir)
|
|
25
|
-
|
|
26
|
-
const getAssetPath = require('../util/getAssetPath')
|
|
27
|
-
const outputFilename = getAssetPath(
|
|
28
|
-
options,
|
|
29
|
-
`js/[name]${isLegacyBundle ? `-legacy` : ``}${isProd && options.filenameHashing ? '.[contenthash:8]' : ''}.js`
|
|
30
|
-
)
|
|
31
|
-
webpackConfig
|
|
32
|
-
.output
|
|
33
|
-
.filename(outputFilename)
|
|
34
|
-
.chunkFilename(outputFilename)
|
|
35
|
-
|
|
36
|
-
const webpack = require('webpack')
|
|
37
|
-
const { semver } = require('@vue/cli-shared-utils')
|
|
38
|
-
const webpackMajor = semver.major(webpack.version)
|
|
39
|
-
if (webpackMajor !== 4) {
|
|
40
|
-
// FIXME: a temporary workaround to get accurate contenthash in `applyLegacy`
|
|
41
|
-
// Should use a better fix per discussions at <https://github.com/jantimon/html-webpack-plugin/issues/1554#issuecomment-753653580>
|
|
42
|
-
webpackConfig.optimization
|
|
43
|
-
.set('realContentHash', false)
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// code splitting
|
|
47
|
-
// QCode Removed >>>>>
|
|
48
|
-
// if (process.env.NODE_ENV !== 'test') {
|
|
49
|
-
// webpackConfig.optimization.splitChunks({
|
|
50
|
-
// cacheGroups: {
|
|
51
|
-
// defaultVendors: {
|
|
52
|
-
// name: `chunk-vendors`,
|
|
53
|
-
// test: /[\\/]node_modules[\\/]/,
|
|
54
|
-
// priority: -10,
|
|
55
|
-
// chunks: 'initial'
|
|
56
|
-
// },
|
|
57
|
-
// common: {
|
|
58
|
-
// name: `chunk-common`,
|
|
59
|
-
// minChunks: 2,
|
|
60
|
-
// priority: -20,
|
|
61
|
-
// chunks: 'initial',
|
|
62
|
-
// reuseExistingChunk: true
|
|
63
|
-
// }
|
|
64
|
-
// }
|
|
65
|
-
// })
|
|
66
|
-
// }
|
|
67
|
-
// QCode Removed <<<<<
|
|
68
|
-
|
|
69
|
-
// HTML plugin
|
|
70
|
-
const resolveClientEnv = require('../util/resolveClientEnv')
|
|
71
|
-
|
|
72
|
-
const htmlOptions = {
|
|
73
|
-
title: api.service.pkg.name,
|
|
74
|
-
scriptLoading: 'defer',
|
|
75
|
-
templateParameters: (compilation, assets, assetTags, pluginOptions) => {
|
|
76
|
-
// enhance html-webpack-plugin's built in template params
|
|
77
|
-
let stats
|
|
78
|
-
return Object.assign({
|
|
79
|
-
// make stats lazy as it is expensive
|
|
80
|
-
// TODO: not sure if it's still needed as of <https://github.com/jantimon/html-webpack-plugin/issues/780#issuecomment-390651831>
|
|
81
|
-
get webpack () {
|
|
82
|
-
return stats || (stats = compilation.getStats().toJson())
|
|
83
|
-
},
|
|
84
|
-
compilation: compilation,
|
|
85
|
-
webpackConfig: compilation.options,
|
|
86
|
-
htmlWebpackPlugin: {
|
|
87
|
-
tags: assetTags,
|
|
88
|
-
files: assets,
|
|
89
|
-
options: pluginOptions
|
|
90
|
-
}
|
|
91
|
-
}, resolveClientEnv(options, true /* raw */))
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// handle indexPath
|
|
96
|
-
if (options.indexPath !== 'index.html') {
|
|
97
|
-
// why not set filename for html-webpack-plugin?
|
|
98
|
-
// 1. It cannot handle absolute paths
|
|
99
|
-
// 2. Relative paths causes incorrect SW manifest to be generated (#2007)
|
|
100
|
-
webpackConfig
|
|
101
|
-
.plugin('move-index')
|
|
102
|
-
.use(require('../webpack/MovePlugin'), [
|
|
103
|
-
path.resolve(outputDir, 'index.html'),
|
|
104
|
-
path.resolve(outputDir, options.indexPath)
|
|
105
|
-
])
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// resolve HTML file(s)
|
|
109
|
-
const HTMLPlugin = require('html-webpack-plugin')
|
|
110
|
-
// const PreloadPlugin = require('@vue/preload-webpack-plugin')
|
|
111
|
-
const multiPageConfig = options.pages
|
|
112
|
-
const htmlPath = api.resolve('public/index.html')
|
|
113
|
-
const defaultHtmlPath = path.resolve(__dirname, 'index-default.html')
|
|
114
|
-
const publicCopyIgnore = ['**/.DS_Store']
|
|
115
|
-
|
|
116
|
-
if (!multiPageConfig) {
|
|
117
|
-
// default, single page setup.
|
|
118
|
-
htmlOptions.template = fs.existsSync(htmlPath)
|
|
119
|
-
? htmlPath
|
|
120
|
-
: defaultHtmlPath
|
|
121
|
-
|
|
122
|
-
publicCopyIgnore.push(api.resolve(htmlOptions.template).replace(/\\/g, '/'))
|
|
123
|
-
|
|
124
|
-
webpackConfig
|
|
125
|
-
.plugin('html')
|
|
126
|
-
.use(HTMLPlugin, [htmlOptions])
|
|
127
|
-
|
|
128
|
-
// FIXME: need to test out preload plugin's compatibility with html-webpack-plugin 4/5
|
|
129
|
-
// if (!isLegacyBundle) {
|
|
130
|
-
// // inject preload/prefetch to HTML
|
|
131
|
-
// webpackConfig
|
|
132
|
-
// .plugin('preload')
|
|
133
|
-
// .use(PreloadPlugin, [{
|
|
134
|
-
// rel: 'preload',
|
|
135
|
-
// include: 'initial',
|
|
136
|
-
// fileBlacklist: [/\.map$/, /hot-update\.js$/]
|
|
137
|
-
// }])
|
|
138
|
-
|
|
139
|
-
// webpackConfig
|
|
140
|
-
// .plugin('prefetch')
|
|
141
|
-
// .use(PreloadPlugin, [{
|
|
142
|
-
// rel: 'prefetch',
|
|
143
|
-
// include: 'asyncChunks'
|
|
144
|
-
// }])
|
|
145
|
-
// }
|
|
146
|
-
} else {
|
|
147
|
-
// multi-page setup
|
|
148
|
-
webpackConfig.entryPoints.clear()
|
|
149
|
-
|
|
150
|
-
const pages = Object.keys(multiPageConfig)
|
|
151
|
-
const normalizePageConfig = c => typeof c === 'string' ? { entry: c } : c
|
|
152
|
-
|
|
153
|
-
pages.forEach(name => {
|
|
154
|
-
const pageConfig = normalizePageConfig(multiPageConfig[name])
|
|
155
|
-
const {
|
|
156
|
-
entry,
|
|
157
|
-
template = `public/${name}.html`,
|
|
158
|
-
filename = `${name}.html`,
|
|
159
|
-
chunks = ['chunk-vendors', 'chunk-common', name]
|
|
160
|
-
} = pageConfig
|
|
161
|
-
|
|
162
|
-
// Currently Cypress v3.1.0 comes with a very old version of Node,
|
|
163
|
-
// which does not support object rest syntax.
|
|
164
|
-
// (https://github.com/cypress-io/cypress/issues/2253)
|
|
165
|
-
// So here we have to extract the customHtmlOptions manually.
|
|
166
|
-
const customHtmlOptions = {}
|
|
167
|
-
for (const key in pageConfig) {
|
|
168
|
-
if (
|
|
169
|
-
!['entry', 'template', 'filename', 'chunks'].includes(key)
|
|
170
|
-
) {
|
|
171
|
-
customHtmlOptions[key] = pageConfig[key]
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// inject entry
|
|
176
|
-
const entries = Array.isArray(entry) ? entry : [entry]
|
|
177
|
-
webpackConfig.entry(name).merge(entries.map(e => api.resolve(e)))
|
|
178
|
-
|
|
179
|
-
// trim inline loader
|
|
180
|
-
// * See https://github.com/jantimon/html-webpack-plugin/blob/master/docs/template-option.md#2-setting-a-loader-directly-for-the-template
|
|
181
|
-
const templateWithoutLoader = template.replace(/^.+!/, '').replace(/\?.+$/, '')
|
|
182
|
-
|
|
183
|
-
// resolve page index template
|
|
184
|
-
const hasDedicatedTemplate = fs.existsSync(api.resolve(templateWithoutLoader))
|
|
185
|
-
const templatePath = hasDedicatedTemplate
|
|
186
|
-
? template
|
|
187
|
-
: fs.existsSync(htmlPath)
|
|
188
|
-
? htmlPath
|
|
189
|
-
: defaultHtmlPath
|
|
190
|
-
|
|
191
|
-
publicCopyIgnore.push(api.resolve(templateWithoutLoader).replace(/\\/g, '/'))
|
|
192
|
-
|
|
193
|
-
// inject html plugin for the page
|
|
194
|
-
const pageHtmlOptions = Object.assign(
|
|
195
|
-
{},
|
|
196
|
-
htmlOptions,
|
|
197
|
-
{
|
|
198
|
-
chunks,
|
|
199
|
-
template: templatePath,
|
|
200
|
-
filename: ensureRelative(outputDir, filename)
|
|
201
|
-
},
|
|
202
|
-
customHtmlOptions
|
|
203
|
-
)
|
|
204
|
-
|
|
205
|
-
webpackConfig
|
|
206
|
-
.plugin(`html-${name}`)
|
|
207
|
-
.use(HTMLPlugin, [pageHtmlOptions])
|
|
208
|
-
})
|
|
209
|
-
|
|
210
|
-
// FIXME: preload plugin is not compatible with webpack 5 / html-webpack-plugin 4 yet
|
|
211
|
-
// if (!isLegacyBundle) {
|
|
212
|
-
// pages.forEach(name => {
|
|
213
|
-
// const filename = ensureRelative(
|
|
214
|
-
// outputDir,
|
|
215
|
-
// normalizePageConfig(multiPageConfig[name]).filename || `${name}.html`
|
|
216
|
-
// )
|
|
217
|
-
// webpackConfig
|
|
218
|
-
// .plugin(`preload-${name}`)
|
|
219
|
-
// .use(PreloadPlugin, [{
|
|
220
|
-
// rel: 'preload',
|
|
221
|
-
// includeHtmlNames: [filename],
|
|
222
|
-
// include: {
|
|
223
|
-
// type: 'initial',
|
|
224
|
-
// entries: [name]
|
|
225
|
-
// },
|
|
226
|
-
// fileBlacklist: [/\.map$/, /hot-update\.js$/]
|
|
227
|
-
// }])
|
|
228
|
-
|
|
229
|
-
// webpackConfig
|
|
230
|
-
// .plugin(`prefetch-${name}`)
|
|
231
|
-
// .use(PreloadPlugin, [{
|
|
232
|
-
// rel: 'prefetch',
|
|
233
|
-
// includeHtmlNames: [filename],
|
|
234
|
-
// include: {
|
|
235
|
-
// type: 'asyncChunks',
|
|
236
|
-
// entries: [name]
|
|
237
|
-
// }
|
|
238
|
-
// }])
|
|
239
|
-
// })
|
|
240
|
-
// }
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
// CORS and Subresource Integrity
|
|
244
|
-
if (options.crossorigin != null || options.integrity) {
|
|
245
|
-
webpackConfig
|
|
246
|
-
.plugin('cors')
|
|
247
|
-
.use(require('../webpack/CorsPlugin'), [{
|
|
248
|
-
crossorigin: options.crossorigin,
|
|
249
|
-
integrity: options.integrity,
|
|
250
|
-
publicPath: options.publicPath
|
|
251
|
-
}])
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
// copy static assets in public/
|
|
255
|
-
const publicDir = api.resolve('public')
|
|
256
|
-
if (!isLegacyBundle && fs.existsSync(publicDir)) {
|
|
257
|
-
webpackConfig
|
|
258
|
-
.plugin('copy')
|
|
259
|
-
.use(require('copy-webpack-plugin'), [{
|
|
260
|
-
patterns: [{
|
|
261
|
-
from: publicDir,
|
|
262
|
-
to: outputDir,
|
|
263
|
-
toType: 'dir',
|
|
264
|
-
noErrorOnMissing: true,
|
|
265
|
-
globOptions: {
|
|
266
|
-
ignore: publicCopyIgnore
|
|
267
|
-
}
|
|
268
|
-
}]
|
|
269
|
-
}])
|
|
270
|
-
}
|
|
271
|
-
})
|
|
272
|
-
}
|