@shijiu/jsview-vue 0.9.254 → 0.9.267

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.
Files changed (168) hide show
  1. package/dom/bin/package.json +11 -11
  2. package/dom/browser-root-style.css +21 -21
  3. package/loader/jsview-main.js +41 -41
  4. package/loader/jsview.config.default.js +37 -37
  5. package/loader/jsview.default.config.js +37 -37
  6. package/package.json +1 -5
  7. package/samples/AdvanceMetroWidget/App.vue +122 -122
  8. package/samples/AdvanceMetroWidget/Frame.vue +100 -100
  9. package/samples/AdvanceMetroWidget/Item.vue +57 -57
  10. package/samples/AdvanceMetroWidget/data.js +136 -136
  11. package/samples/AnimPicture/App.vue +223 -223
  12. package/samples/Basic/App.vue +128 -128
  13. package/samples/Basic/components/TitleBar.vue +28 -28
  14. package/samples/Basic/components/anim/AnimGroup.vue +67 -67
  15. package/samples/Basic/components/anim/AnimKeyframeBasic.vue +101 -101
  16. package/samples/Basic/components/anim/AnimKeyframeComposite.vue +52 -52
  17. package/samples/Basic/components/anim/AnimTransition.vue +116 -116
  18. package/samples/Basic/components/div/DivBackground.vue +14 -14
  19. package/samples/Basic/components/div/DivClip.vue +80 -80
  20. package/samples/Basic/components/div/DivCssScoped.vue +26 -26
  21. package/samples/Basic/components/div/DivCssVar.vue +49 -49
  22. package/samples/Basic/components/div/DivGroup1.vue +32 -32
  23. package/samples/Basic/components/div/DivGroup2.vue +40 -40
  24. package/samples/Basic/components/div/DivLayout.vue +11 -11
  25. package/samples/Basic/components/div/DivRadius.vue +46 -46
  26. package/samples/Basic/components/text/TextAlign.vue +47 -47
  27. package/samples/Basic/components/text/TextFontStyle.vue +57 -57
  28. package/samples/Basic/components/text/TextGroup.vue +31 -31
  29. package/samples/Basic/components/text/TextOverflow.vue +77 -77
  30. package/samples/BasicFocusControl/App.vue +124 -124
  31. package/samples/BasicFocusControl/components/BaseBlock.vue +50 -50
  32. package/samples/BasicFocusControl/components/MainArea.vue +97 -97
  33. package/samples/BasicFocusControl/components/MainAreaLeftBlock.vue +20 -20
  34. package/samples/BasicFocusControl/components/MainAreaRightBlock.vue +29 -29
  35. package/samples/BasicFocusControl/components/SideBar.vue +72 -72
  36. package/samples/BasicFocusControl/components/SideBarBlock.vue +29 -29
  37. package/samples/ClassNameDemo/App.vue +119 -119
  38. package/samples/ClassNameDemo/components/ContentItem.vue +252 -252
  39. package/samples/ClassNameDemo/components/LoadingView.vue +43 -43
  40. package/samples/ClassNameDemo/components/TitleView.vue +24 -24
  41. package/samples/ClassNameDemo/data.js +24 -24
  42. package/samples/ColorSpace/App.vue +134 -134
  43. package/samples/DemoHomepage/App.vue +31 -31
  44. package/samples/DemoHomepage/components/BodyFrame.vue +81 -81
  45. package/samples/DemoHomepage/components/Dialog.vue +93 -93
  46. package/samples/DemoHomepage/components/Item.vue +76 -76
  47. package/samples/DemoHomepage/components/TabFrame.vue +86 -86
  48. package/samples/DemoHomepage/router.js +132 -132
  49. package/samples/DemoHomepage/views/Homepage.vue +186 -186
  50. package/samples/FlipCard/App.vue +80 -80
  51. package/samples/FlipCard/FlipCard.vue +123 -123
  52. package/samples/FlipCard/data.js +12 -12
  53. package/samples/FlowMultiWidget/App.vue +90 -90
  54. package/samples/FlowMultiWidget/components/Block.vue +106 -106
  55. package/samples/FlowMultiWidget/components/FlowPage.vue +59 -59
  56. package/samples/FlowMultiWidget/components/Item.vue +102 -102
  57. package/samples/FlowMultiWidget/components/MenuItem.vue +71 -71
  58. package/samples/FlowMultiWidget/components/MyMenu.vue +89 -89
  59. package/samples/FlowMultiWidget/data.js +446 -446
  60. package/samples/HashHistory/App.vue +124 -124
  61. package/samples/HashHistory/components/HorizontalButtonList.vue +113 -113
  62. package/samples/HashHistory/components/Item.vue +73 -73
  63. package/samples/HashHistory/router.js +29 -29
  64. package/samples/HashHistory/views/BasePage.vue +18 -18
  65. package/samples/HashHistory/views/MainPage.vue +67 -67
  66. package/samples/HashHistory/views/SubPage.vue +78 -78
  67. package/samples/HashHistory/views/SubPageFirst.vue +9 -9
  68. package/samples/HashHistory/views/SubPageSecond.vue +9 -9
  69. package/samples/LongImage/App.vue +96 -96
  70. package/samples/LongImage/Button.vue +153 -153
  71. package/samples/LongImage/LongImageScroll.vue +126 -126
  72. package/samples/LongImage/Scroll.vue +15 -15
  73. package/samples/LongText/App.vue +111 -111
  74. package/samples/LongText/Button.vue +153 -153
  75. package/samples/LongText/LongTextScroll.vue +224 -224
  76. package/samples/LongText/Scroll.vue +15 -15
  77. package/samples/Preload/App.vue +145 -145
  78. package/samples/Preload/data.js +22 -22
  79. package/samples/Preload/preloadItem.vue +21 -21
  80. package/samples/QrcodeDemo/App.vue +72 -72
  81. package/samples/SimpleWidgetDemo/App.vue +203 -203
  82. package/samples/SimpleWidgetDemo/Item.vue +82 -82
  83. package/samples/SimpleWidgetDemo/components/ContentItem.vue +411 -411
  84. package/samples/SimpleWidgetDemo/components/MyTab.vue +116 -116
  85. package/samples/SimpleWidgetDemo/data.js +110 -110
  86. package/samples/SprayView/App.vue +269 -269
  87. package/samples/SpriteImage/App.vue +174 -174
  88. package/samples/SpriteImage/images/egg_break.json +116 -116
  89. package/samples/TextBox/App.vue +178 -178
  90. package/samples/TextBox/RenderCenter.vue +108 -108
  91. package/samples/TextBox/RenderLeft.vue +108 -108
  92. package/samples/TextBox/RenderOneLine.vue +119 -119
  93. package/samples/TextBox/RenderRight.vue +106 -106
  94. package/samples/TextShadowDemo/App.vue +97 -97
  95. package/samples/TextureSize/App.vue +141 -141
  96. package/samples/ThrowMoveDemo/AccelerateDemo.vue +117 -117
  97. package/samples/ThrowMoveDemo/App.vue +113 -113
  98. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +115 -115
  99. package/samples/ThrowMoveDemo/TargetDemo.vue +116 -116
  100. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +121 -121
  101. package/samples/TransitPage/App.vue +40 -40
  102. package/samples/VideoDemo/App.vue +137 -137
  103. package/samples/VideoDemo/components/Button.vue +68 -68
  104. package/samples/VideoDemo/components/Controllor.vue +195 -195
  105. package/samples/VideoDemo/components/VideoFrame.vue +152 -152
  106. package/scripts/common.js +57 -115
  107. package/scripts/jsview-install-local-packages.js +73 -73
  108. package/scripts/jsview-post-build.js +127 -127
  109. package/scripts/jsview-post-install.js +78 -78
  110. package/scripts/jsview-run-android.js +64 -64
  111. package/utils/JsViewEngineWidget/bin/index.js +1 -1
  112. package/utils/JsViewEngineWidget/bin/package.json +11 -11
  113. package/utils/JsViewVueTools/JsvHashHistory.js +111 -111
  114. package/utils/JsViewVueTools/JsvRuntimeBridge.js +417 -417
  115. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserPreload.vue +80 -80
  116. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +147 -147
  117. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserSpray.vue +54 -54
  118. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/ApicDataBase.js +28 -28
  119. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/BrowserApic.vue +123 -123
  120. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/GifData.js +83 -83
  121. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/LoopToolBase.js +25 -25
  122. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/NormalLoopTool.js +61 -61
  123. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/PartLoopTool.js +119 -119
  124. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/Viewer.js +106 -106
  125. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/WebpData.js +141 -141
  126. package/utils/JsViewVueWidget/BrowserDebugWidget/WidgetLoader.js +20 -20
  127. package/utils/JsViewVueWidget/JsvActorMove/ActorControlBase.js +204 -204
  128. package/utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue +63 -63
  129. package/utils/JsViewVueWidget/JsvActorMove/JsvActorMoveControl.js +426 -426
  130. package/utils/JsViewVueWidget/JsvActorMove/index.js +12 -12
  131. package/utils/JsViewVueWidget/JsvApic/JsvApic.vue +178 -178
  132. package/utils/JsViewVueWidget/JsvApic/index.js +17 -17
  133. package/utils/JsViewVueWidget/JsvMarquee.vue +196 -196
  134. package/utils/JsViewVueWidget/JsvNinePatch.vue +76 -76
  135. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +350 -350
  136. package/utils/JsViewVueWidget/JsvPreload/index.js +21 -21
  137. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +140 -140
  138. package/utils/JsViewVueWidget/JsvQrcode/index.js +18 -18
  139. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +139 -139
  140. package/utils/JsViewVueWidget/JsvSpray/index.js +14 -14
  141. package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue +447 -447
  142. package/utils/JsViewVueWidget/JsvSpriteAnim/SpriteController.js +56 -56
  143. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +6 -6
  144. package/utils/JsViewVueWidget/JsvSwiper/Indicator.vue +34 -34
  145. package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +494 -494
  146. package/utils/JsViewVueWidget/JsvSwiper/index.js +9 -9
  147. package/utils/JsViewVueWidget/JsvSwiper3D/Indicator.vue +34 -34
  148. package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +403 -403
  149. package/utils/JsViewVueWidget/JsvSwiper3D/index.js +9 -9
  150. package/utils/JsViewVueWidget/JsvTextBox.vue +110 -110
  151. package/utils/JsViewVueWidget/JsvVideo.vue +35 -35
  152. package/patches/node_modules/@babel/preset-env/lib/available-plugins.js +0 -219
  153. package/patches/node_modules/@vue/cli-plugin-typescript/index.js +0 -100
  154. package/patches/node_modules/@vue/cli-service/lib/commands/serve.js +0 -395
  155. package/patches/node_modules/@vue/cli-service/lib/config/app.js +0 -272
  156. package/patches/node_modules/@vue/cli-service/lib/config/assets.js +0 -70
  157. package/patches/node_modules/@vue/cli-service/lib/config/base.js +0 -212
  158. package/patches/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +0 -2566
  159. package/patches/node_modules/@vue/compiler-sfc/dist/jsview-css-to-js.js +0 -274
  160. package/patches/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js +0 -1596
  161. package/patches/node_modules/postcss-js/objectifier.js +0 -90
  162. package/patches/node_modules/vue-loader/dist/resolveScript.js +0 -70
  163. package/scripts/deploy-fast-pack.js +0 -17
  164. package/scripts/deploy-fast-publish.js +0 -44
  165. package/scripts/deploy-git-commit-empty.js +0 -21
  166. package/scripts/deploy-prepare.js +0 -56
  167. package/scripts/make-js.sh +0 -181
  168. package/vetur.config.js +0 -5
@@ -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
- }