你可能留神到了咱们的动态资源共有两个目录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.jsmodule.exports = { // ... build: { assetsPublicPath: '/', assetsSubDirectory: 'static' }}
任何在 static/ 中的文件都须要被应用绝对路径 /static/[filename]来援用. 如果你扭转assetSubDirectory 为assets, 那么这些 URLs将须要被替换为 /assets/[filename].
译自:http://vuejs-templates.github...