@shijiu/jsview-vue 0.9.246 → 0.9.254

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