【发布时间】:2016-02-14 23:02:18
【问题描述】:
我最近在我的 yeoman 应用程序中引入了 angular 指令用于模板化,如果我 grunt 为应用程序的正常开发版本提供服务,一切正常,但是当我使用 grunt 构建“dist”文件夹并提供服务时,html我的应用程序的指令未出现在页面上,控制台记录此错误:
Failed to load resource: the server responded with a status of 404 (Not Found)
vendor.6e8f248d.js:5 Error: [$compile:tpload] Failed to load template:
/views/tabdir.html (HTTP status: 404 Not Found)
我读到依赖注入需要采用数组格式,这样缩小才不会弄乱它,所以我对所有控制器都这样做了,但同样的问题仍然存在。例如:
angular.module('MainApp').controller('MainCtrl', ['$scope', 'inputBlur', function ($scope, inputBlur) {
}]);
是什么导致我的指令不能被 grunt 正确加载?
【问题讨论】:
-
听起来您使用 Grunt 的构建过程配置不正确。您是否使用
html2js将 HTML 模板正确包含在 dev 中,但可能没有将它们连接到您的 dist 脚本?在 dev 和 dist 中交付 HTML 文件的方式有什么区别?我很确定这与缩小错误无关。 -
我没听说过 html2js,我使用的是 yeoman 配置的默认设置。这会对我有帮助吗?我应该寻找 dev/dist 之间的哪些差异?
-
我不知道 yeoman 使用的默认设置是什么,抱歉。您可以检查的一件事是在开发模式下运行时是否对 HTML 模板发出请求(使用开发人员工具的网络选项卡)。还要检查提供的 JS 文件列表(或它们的内容)是否在 dev 和 dist 之间相同。
-
dev/dist 网络选项卡的不同之处在于 dev 没有缩小而 dist 是缩小。 dist 的网络选项卡显示未缩小的 html 指令的 GET 请求失败,就好像它试图抓取不再存在的未缩小文件一样。这可能是问题吗?
-
听起来确实像 dev JS 文件包含作为 JS 的 HTML 模板。在 dev 和 dist 文件中搜索
$templateCache.put(- 如果我是对的,那么一大堆将在 dev 文件中,而不是在 dist 文件中。或者,如果它实际上是在开发模式下从服务器获取 HTML 部分,那么您可能需要考虑使用html2js之类的东西将部分包含在 dist JS 文件中,这样您就不必分发 HTML 文件分开。
标签: javascript html angularjs gruntjs yeoman