Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript flask assets-如何防止特定应用程序的静态js文件被其他应用程序使用_Javascript_Python_Html_Flask_Flask Assets - Fatal编程技术网

Javascript flask assets-如何防止特定应用程序的静态js文件被其他应用程序使用

Javascript flask assets-如何防止特定应用程序的静态js文件被其他应用程序使用,javascript,python,html,flask,flask-assets,Javascript,Python,Html,Flask,Flask Assets,我以前做过,但我完全忘记了我是怎么做的。 我正在开发一个flask服务器,它包含多个静态文件捆绑在一起的应用程序,但我希望每个应用程序的静态文件夹中的js/css文件仅由该应用程序的init.py文件中定义的路由使用 假设我有一个appA和appB: app - static // this contains my common js/css files - apps - appA - __init__.py - static // appA's js/css files - a

我以前做过,但我完全忘记了我是怎么做的。 我正在开发一个flask服务器,它包含多个静态文件捆绑在一起的应用程序,但我希望每个应用程序的静态文件夹中的js/css文件仅由该应用程序的init.py文件中定义的路由使用

假设我有一个appA和appB:

app
- static // this contains my common js/css files
- apps
 - appA
   - __init__.py
   - static // appA's js/css files
 - appB
  - __init__.py
  - static // appB's js/css files
我转到localhost:8000:/appA,假设它是我定义的路由。在它的js文件中,我有

$(document).ready(function(params) {
    console.log('appA ready');
});
如果我转到localhost:8000/appB,它的js文件中有

$(document).ready(function(params) {
    console.log('appB ready');
});
无论我运行哪条路线,我都会看到控制台中打印的appA就绪和appB就绪。 现在我知道这是有道理的。毕竟,我已经将它们打包并缩小了。但就我的一生而言,我知道我过去使用过捆绑包,但能够挑出哪个应用程序使用了什么静态文件

关键是使用一个基本的静态目录来处理常见的内容,而应用程序的静态目录用于处理特定于应用程序的内容

我的资产配置得很好

from app.apps.appA import appA
from app.apps.appA import appA_js, appA_css

from app.apps.appB import appB
from app.apps.appB import appB_js, appB_css


flask_app.register_blueprint(appA)
flask_app.register_blueprint(appB)

globals_js = ('js/utils/jquery-3.4.1.min.js',
          'js/utils/socket.io.js',
          'js/utils/*.js')
globals_css = ('css/utils/common.css',
           'css/utils/*.css')

assets = Environment(flask_app)
bundle_globals_js = Bundle(*globals_js + appA_js + appB_js, filters='jsmin', output='dist/local_js.js')
bundle_globals_css = Bundle(*globals_css + appA_css + appB_css, filters='cssmin', output='dist/local_css.css')

assets.register('base_js', bundle_globals_js)
assets.register('base_css', bundle_globals_css)
我觉得我的资产包配置有问题。或者这就是我在html中导入文件的方式

<head>
    {% assets "base_js" %}
        <script type="text/javascript" src="{{ ASSET_URL }}"></script>
    {% endassets %}
    {% assets "base_css" %}
        <link rel="stylesheet" href="{{ ASSET_URL }}"/>
    {% endassets %}
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>{{title}}</title>
</head>
这是appA和appB拥有的每个特定html文件所使用的头代码。 对于如何使用捆绑包,这里可能存在一个根本性的误解。 我只想指定一个通用的静态目录,但可以让我的应用程序将自己的js/css文件与这些基本文件结合使用

有人能给我指出正确的方向吗


谢谢

我找到了答案,虽然不是以我记得的方式

而不是将我所有的静态文件打包成一个base_js或base_css包, 我创建了具有唯一名称的独立包

bundles = {
   'globals_js': Bundle('js/utils/jquery-3.4.1.min.js',
                     'js/utils/socket.io.js',
                     'js/utils/*.js',
                     filters='jsmin',
                     output='dist/local_global_js.js'),

   'globals_css': Bundle('css/utils/common.css',
                     'css/utils/*.css',
                     filters='cssmin',
                     output='dist/local_global_css.css'),       

   'appA_js': Bundle(*appA_js, 
                      filters='jsmin',
                      output='dist/local_appA_js.js'),

   'appA_css': Bundle(*appA_css, 
                       filters='cssmin',
                       output='dist/local_appA_css.css'),          

   'appB_js': Bundle(*appB_js, 
                               filters='jsmin',
                               output='dist/local_appB_js.js'),

   'appB_css': Bundle(*appB_css, 
                       filters='cssmin',
                       output='dist/local_appB_css.css')

}
现在,我指定一个基本html文件,该文件在头部添加全局资产

<head>
    {% assets "globals_js" %}
        <script type="text/javascript" src="{{ ASSET_URL }}"></script>
    {% endassets %}
    {% assets "globals_css" %}
        <link rel="stylesheet" href="{{ ASSET_URL }}"/>
    {% endassets %}
</head>
<body>        
 {%block data %}{% endblock %}

</body>
</html>
在appA或appB中,我扩展了该基本html文件,并在扩展的代码块中添加了特定的静态资产

{% extends "base.html" %}

{% block data %}
{% assets "appA_js" %}
    <script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}
{% assets "appA_css" %}
    <link rel="stylesheet" href="{{ ASSET_URL }}"/>
{% endassets %}

{% endblock %}
现在appA/appB只加载各自的静态文件

谢谢