• vue中assets和static目录的区别


    在vue的目录结构中,static是静态资源目录,可以用于放置图片、字体等。而在src目录(开发目录)下,同样提供了一个assets目录,可以用于存放图片,比如logo等。虽然这两个目录都可以用于放置图片,但是在使用上却是有一些差别的。

    在HTML中使用

    在HTML中使用,两者都可以直接使用路径来访问。

    <img src="../assets/yanggb.png" alt="yanggb" title="assets中的图片">
    <img src="/static/yanggb.png" alt="yanggb" title="static中的图片">

    要注意的是,访问assets目录下的资源文件使用的是相对路径,而访问static目录下的资源文件则需要使用绝对路径,具体原因在后面说。

    在JS中使用(动态绑定)

    assets下的资源如果要在js中使用的话,路径需要经过webpack中的file-loader编译,如果直接编写路径会导致加载资源失败(找不到资源)。

    <template>
        <div>
            <img :src="assetsUrl" title="assets中的图片">
            <img :src="staticUrl" title="static中的图片">
        </div>
    </template>
    
    export default {
        name: 'yanggb',
        data () {
            return {
                assetsUrl: require('../assets/yanggb.png'),
                staticUrl: '/static/yanggb.png'
            }
        }
    }

    因为webpack使用的是commonJS规范,因此必须要使用require才能将模块化的静态图片资源加载进来(引用依赖)。

    在打包时候的区别

    在vue的组件中,所有的模板和css都会被vue-html-loader和css-loader解析,并查找资源的url,比如在<img src="./yanggb.png">中,该url是相对的资源路径,就会由webpack解析为模块依赖,而因为yanggb.png不是js,当被视为模块依赖的时候,就需要使用url-loader和file-loader来处理它。因为vue-cli的webpack脚手架中已经配置了这些loader,因此可以使用相对/模块路径来访问这些资源文件。

    由于这些资源在webpack构建的过程中可能会被内联/复制/重命名,因此它们可以视作是源码的一部分,这也是为什么建议要将webpack处理的静态资源放在src中和其他的源文件放在一起的原因。事实上,这些资源文件甚至可以不必放到src/assets目录下,而是放置到每个放置组件的目录下,使用模块/组件的组织方式使用它们。

    相比之下,在static下目录下面的文件是不会被webpack处理的,这些资源文件会被直接复制到最终的打包目录下面(默认是dist/static),且必须使用绝对路径来引用这些文件。这一特性是通过在config.js文件中的build.assetsPublicPath和build.assetsSubDirectory链接来确定的。

    有时我们需要修改node_module目录中的源码,在插件源码修改后,打包后的文件应放在static目录。如果放在其他目录,webpack会重新打包,可能导致出现例如【did you register the component correctly? 】这样的组件报错。

    总结

    1.static中的文件是不会经过webpack编译的,一般建议存放一些外部第三方(公用)的静态资源文件。

    2.assets因为会经过webpack编译,建议是存放一些只有组件自己使用到的静态资源。

    "你自人山人海中而来,原来只为了给我一场空欢喜。"

  • 相关阅读:
    (四十九)android解决同一个界面上ScrollView和 ListView等可滚动控件滚动冲突问题
    (四十八)Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
    (四十七)属性动画Demo
    (四十六)一个属性动画的经典例子(让TextView中的数值从某一个值变成0再变到另一个值)
    (四十五)百度地图在android中的应用
    iOS 检查更新
    iOS Apple Pay
    iOS 获取emoji表情和拦截emoji表情
    iOS拨打电话的三种方式
    Swift
  • 原文地址:https://www.cnblogs.com/yanggb/p/12452389.html
Copyright © 2020-2023  润新知