Meteor 项目中 /public/assets/ 的奇怪案例
The curious case of /public/assets/ in a Meteor project
在我的 Meteor 1.10.2 项目中,我在 /public/
文件夹中创建了一个名为 assets
的文件夹。当构建 Meteor 应用程序时,我发现这个 assets
文件夹已被复制到这些位置,作为 web.browser...
文件夹的直接子文件夹:
/.meteor/local/build/programs/web.browser/assets/
/.meteor/local/build/programs/web.browser.legacy/assets
但是,如果我将文件夹重命名为 Assets
(或者如果我给它起任何其他名称),则在构建应用程序时,我会在 app
文件夹的更深处找到它:
/.meteor/local/build/programs/web.browser/app/Assets/
/.meteor/local/build/programs/web.browser.legacy/app/Assets/
这背后的逻辑是什么?意图何在?使用 /public/assets/
上的文件夹的最佳做法是什么?在用作 /public/
文件夹中的文件夹名称时,是否有任何其他词得到特殊对待?
Meteor 所做的是多次构建您的项目。一次用于旧版 Web 浏览器,一次用于现代浏览器,还用于其他平台,例如 IOS 或 Android。如您所见,它在 .meteor/local 文件夹中执行所有这些操作。
Meteor 有/private 文件夹的概念,类似于/public,只不过Meteor 认为它们是assets
。这可能解释了为什么您的文件夹会根据名称出现在不同的位置。
我个人不太担心 Meteor 如何处理文件,除非你想成为贡献者,在这种情况下欢迎你四处闲逛:)
FWIW,此行为特别是由于流星工具捆绑器:
https://github.com/meteor/meteor/blob/release/METEOR%401.10.2/tools/isobuild/bundler.js#L719-L725
setTargetPathFromRelPath(relPath) {
// XXX hack
if (relPath.match(/^(packages|assets|dynamic)\//)) {
this.targetPath = relPath;
} else {
this.targetPath = files.pathJoin('app', relPath);
}
因此我们可以看到有 3 个特殊目录名称表现出这种特殊行为:
- 包
- 资产
- 动态
具有 public 资产的示例:
构建中捆绑的这些资产:
对于“包”,虽然我们可以理解 Meteor 是如何运送包的静态资产的(即当它们调用 api.addAssets()
时,我们也可以看到有可能发生冲突,在(尽管不太可能)我们使用像“public/packages/my-package-name”这样的路径名的情况。
至于“资产”,最初的名称是“静态”,但我认为它也public没有被记录下来。
对于“动态”,我还不知道它的确切用途是什么,但我们可以看到它的内容以“javascript”类型(至少是 SVG 文件)提供,而第一个2 将它们作为“text/plain”。
在我的 Meteor 1.10.2 项目中,我在 /public/
文件夹中创建了一个名为 assets
的文件夹。当构建 Meteor 应用程序时,我发现这个 assets
文件夹已被复制到这些位置,作为 web.browser...
文件夹的直接子文件夹:
/.meteor/local/build/programs/web.browser/assets/
/.meteor/local/build/programs/web.browser.legacy/assets
但是,如果我将文件夹重命名为 Assets
(或者如果我给它起任何其他名称),则在构建应用程序时,我会在 app
文件夹的更深处找到它:
/.meteor/local/build/programs/web.browser/app/Assets/
/.meteor/local/build/programs/web.browser.legacy/app/Assets/
这背后的逻辑是什么?意图何在?使用 /public/assets/
上的文件夹的最佳做法是什么?在用作 /public/
文件夹中的文件夹名称时,是否有任何其他词得到特殊对待?
Meteor 所做的是多次构建您的项目。一次用于旧版 Web 浏览器,一次用于现代浏览器,还用于其他平台,例如 IOS 或 Android。如您所见,它在 .meteor/local 文件夹中执行所有这些操作。
Meteor 有/private 文件夹的概念,类似于/public,只不过Meteor 认为它们是assets
。这可能解释了为什么您的文件夹会根据名称出现在不同的位置。
我个人不太担心 Meteor 如何处理文件,除非你想成为贡献者,在这种情况下欢迎你四处闲逛:)
FWIW,此行为特别是由于流星工具捆绑器:
https://github.com/meteor/meteor/blob/release/METEOR%401.10.2/tools/isobuild/bundler.js#L719-L725
setTargetPathFromRelPath(relPath) {
// XXX hack
if (relPath.match(/^(packages|assets|dynamic)\//)) {
this.targetPath = relPath;
} else {
this.targetPath = files.pathJoin('app', relPath);
}
因此我们可以看到有 3 个特殊目录名称表现出这种特殊行为:
- 包
- 资产
- 动态
具有 public 资产的示例:
构建中捆绑的这些资产:
对于“包”,虽然我们可以理解 Meteor 是如何运送包的静态资产的(即当它们调用 api.addAssets()
时,我们也可以看到有可能发生冲突,在(尽管不太可能)我们使用像“public/packages/my-package-name”这样的路径名的情况。
至于“资产”,最初的名称是“静态”,但我认为它也public没有被记录下来。
对于“动态”,我还不知道它的确切用途是什么,但我们可以看到它的内容以“javascript”类型(至少是 SVG 文件)提供,而第一个2 将它们作为“text/plain”。