我爱编程

JHipster一知半解- 4.6.1 webapp-目录结构

2018-06-13  本文已影响155人  沉寂之舟

回文集目录:JHipster一知半解

目录结构

  1. 主目录位于“\src\main\webapp”,
    在tscconfig.json中指定文件目录:
"include": [
        "src/main/webapp/app",
        "src/test/javascript/"
    ] 

在webpack.dev.js,webpack.prod.js中指定入口:

entry: {
        polyfills: './src/main/webapp/app/polyfills',
        global: './src/main/webapp/content/css/global.css',
        main: './src/main/webapp/app/app.main'
    },
    
  1. app目录:
    Angular程序的主目录,后面代码的分析的主体部分。
  2. content目录:
    包含需要打包的静态资源(css和image),类似于assert,仅仅copy并hash重命名,并没有打包在生产的css或js中。
  3. i18n目录:
    内部按照语种存放语种文件,在webpack打包时候会整合成一个××.json的语言包,由ngx-translate统一加载。
  4. swagger-ui目录:
    swagger中jhipster做了修改的自定义部分,其他包含在(node—_modules/swagger-ui)中。
  5. 404.html
    标准的错误页面,提供给运行在tomcat这样的容器时找不到页面的错误显示。理论上,我们生成的前端工程是SPA单页面,应该设置的页面在找不到路由时候返回index,然后由前端去自行解析url处理路由。也就是说,这个页面正常是不起作用的。
  6. manifest.webapp
    网站描述文件,前端缓存用,webpack打包也就是copy到target目录。
  7. robots.txt
    给google机器人用的网站描述文件。JHipster是SPA,那么与后端的api就自然出现在
    Disallow中了。

小动作-给index添加加载效果

JHipster前端SPA,直接打开后要等所有资源加载完毕才显示(虽然已经做了子模块,但是并没有做懒加载?),这样在网络带宽比较慢的情况下,就会出现长时间“白屏幕”,这显然不是很好的用户体验。由angular的运行原理可以知道,程序加载后,会找index.html中<jhi-main>标签,清空其内容,在之后添加angluar主界面。那么,之前我们利用这个原理,向<jhi-main>标签加东西

不要空白-添加文字。

<jhi-main>
    <div>
        <h1>Loading</h1>
    </div>
</jhi-main>

这样就能显示一个“Loading”字符串,防止白屏幕

借鉴ngx-admin

TODO:此处应该有ngx-admin的图片和网站。
通过查看其index,发现它是加了一段动画效果,直接copy过来即可

<jhi-main>
  <style>@-webkit-keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@-moz-keyframes spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.spinner{position:fixed;top:0;left:0;width:100%;height:100%;z-index:1003;background: #ffffff;overflow:hidden}  .spinner div:first-child{display:block;position:relative;left:50%;top:50%;width:150px;height:150px;margin:-75px 0 0 -75px;border-radius:50%;box-shadow:0 3px 3px 0 rgba(255,56,106,1);transform:translate3d(0,0,0);animation:spin 2s linear infinite}  .spinner div:first-child:after,.spinner div:first-child:before{content:'';position:absolute;border-radius:50%}  .spinner div:first-child:before{top:5px;left:5px;right:5px;bottom:5px;box-shadow:0 3px 3px 0 rgb(255, 228, 32);-webkit-animation:spin 3s linear infinite;animation:spin 3s linear infinite}  .spinner div:first-child:after{top:15px;left:15px;right:15px;bottom:15px;box-shadow:0 3px 3px 0 rgba(61, 175, 255,1);animation:spin 1.5s linear infinite}</style>
  <div id="nb-global-spinner" class="spinner">
    <div class="blob blob-0"></div>
    <div class="blob blob-1"></div>
    <div class="blob blob-2"></div>
    <div class="blob blob-3"></div>
    <div class="blob blob-4"></div>
    <div class="blob blob-5"></div>
  </div>
</jhi-main>

当然,发现黑色的背景,和JHipster差别太大,把background改成#ffffff,稍微好看一点点。
TODO:加效果图

借鉴PrimeNG

PrimeNG的index就比较复杂了,是一个图片加上一个css,而且也不是内嵌到html文件中,而是独立的,借鉴过来稍微复杂一点。

1. splash.css拷贝到content/css/splash.css
2. mask.svg拷贝到content/images/mask.svg
3. index.html做如下修改(仅列出增加的部分):
<head>
<link rel="stylesheet" type="text/css" href="./content/splash.css">
</head>
<body>
    <jhi-main>
        <div class="splash-screen">
            <div class="splash-loader"></div>
            <img class="splash-logo" src="./content/images/mask.svg">
        </div>
    </jhi-main>
</body>    
4.webpackCommon.js的CopyWebpackPlugin增加:
new CopyWebpackPlugin([
    { from: './src/main/webapp/content/css/splash.css', to: 'content/splash.css' }
]),
稍微解释一下,svg放content/images会由webpack的file-loader拷贝过去并hash从命名,并且会自动修改生成的index.html,所以图片只需要放入该目录即可。
而css是有指定的global.css作为入口处理的(如果是sass,就会有个先编译在加载的过程),仅仅放到目录,而没有引用,肯定是没法加载的,而且打包在一起和我们提前显示的目的相违背。所以就需要利用CopyWebpackPlugin,把它copy到目标目录,这样就可以在<jhi-main>标签生成前显示给用户。
上一篇下一篇

猜你喜欢

热点阅读