乐趣区

关于javascript:Vuecli中的静态资源管理srcassets和static的区别

你可能留神到了咱们的动态资源共有两个目录 src/assets 和 static/,你们它们之间有怎么的区别呢?

<font size=”5″ color=”#808080″> 资源打包 </font>

为了答复这个问题,咱们须要理解 webpack 是如何解决动态资源的。在所有的 *.vue 文件中你所有的 templates 和 CSS 都被 vue-html-loader 和 css-loader 查问资源的 URLs 解析. 比如说, 在 img src=”./logo.png”background: url(./logo.png)./logo.png 是一个绝对资源门路,并且会被 Webpack 视为一个模块依赖来解析。
因为./logo.png 并非一个 Javascript,当将它作为模块依赖看待时,咱们须要用 url-loader 和 file-loader 去解决它。这种公式化解决早曾经为你配置了 loader,所以你基本上能够取得诸如文件名指纹和有条件的内嵌 base64,因而你可能应用绝对 / 模块门路而不用放心部署问题。
自从这些资源能够在 build 期间被内联 / 复制 / 重命名,它们实质上来讲是你资源代码的一部分。这就是为什么它们被举荐用于延源资源替换 Webpack-processed 的外部 /src 资源。事实上,你甚至不用将它们放进 /src/assets:你能够基于模块 / 组件去组织它们并应用,你能够将每一个组件放进他们本人的文件夹,随着它的动态文件正确的紧挨着它。
**
<font size=”5″ color=”#808080″> 资源决定规定 </font>

  • 绝对 URLs,
    例如 ./assets/logo.png 将会被解释为一个模块依赖.
    它们将会被替换为基于你 Webpack 输入配置主动生成的 URL
  • 无前缀 URLs,
    例如. assets/logo.png 将会被像绝对 URLs 一样解决并将被转化为 ./assets/logo.png.
  • 带~ 前缀的 URLs 将会被看做模块申请,相似于申请 (‘some-module/image.png’).
    如果你想扭转 Webpack 的模块解决配置你须要应用这个前缀。例如, 你须要解决资源的别名,你须要应用 ~assets/logo.png 去确保这个别名时受到重视的.
  • 特权绝对 URLs,
    例如 /assets/logo.png 是齐全不作解决的.

<font size=”5″ color=”#808080″> 在 Javascript 中获取资源门路 </font>
为了使 Webpack 能够正确返回资源门路, 你须要应用 require(‘./relative/path/to/file.jpg’), 它将会被 file-loader 解决 and returns 并返回解决过的 URL. 例如:

computed: {background () {return require('./bgs/' + this.id + '.jpg')
  }
}

留神上例将会蕴含每个在最初一次 build 中的./bgs/ 下的图片。这是因为 Webpack 无奈揣测它们哪个会在运行时被应用, 因而会蕴含所有图片.


<font size=”5″ color=”#808080″>” 真正 ” 的动态资源 </font>

比照而言, static/ 中的文件是齐全不被 Webpack 解决的,它们被以雷同的文件名间接被复制进最终目标 as-is. 你务必要应用绝对路径去援用它们. 这是由 config.js 退出 build.assetspublicpath 和 build.assetssubdirectory 确定。

如下是一个含默认值得例子:

// config/index.js
module.exports = {
  // ...
  build: {
    assetsPublicPath: '/',
    assetsSubDirectory: 'static'
  }
}

任何在 static/ 中的文件都须要被应用绝对路径 /static/[filename]来援用. 如果你扭转 assetSubDirectory 为 assets, 那么这些 URLs 将须要被替换为 /assets/[filename].

译自:http://vuejs-templates.github…

退出移动版