Uncaught ReferenceError: require is not defined using AngularJS, Rails 4 and Browserify
Uncaught ReferenceError: require is not defined using AngularJS, Rails 4 and Browserify
我正在使用 AngularJS 和 Rails,并遵循 http://start.jcolemorrison.com/setting-up-an-angularjs-and-rails-4-1-project/ 和其他几个教程来获得一个非常简单的 "Hello World" 示例和 运行在我的桌面上。问题是,当我将它部署到服务器时,我的基于 Angular 的代码的 none 不再有效。相反,我在控制台中收到 Uncaught ReferenceError: require is not defined
错误。
我意识到我的部分问题是浏览器不知道如何处理 'require' 函数调用,这是有道理的,所以我使用 browserify-rails 安装了 Browserify。但是,它仍然无法像我预期的那样在服务器上运行,并且出现相同的错误。
Link to the live site: Link
这是我的 application.html.erb
(简体):
<!DOCTYPE html>
<html>
<head>
<base href="/" />
<title>ShibaInu</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => false %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => false %>
<%= csrf_meta_tags %>
</head>
<body ng-app="shibaInu">
<div class="container">1 + 2 = {{ 1 + 2 }}</div>
<div class="container">
<%= yield %>
</div>
</body>
</html>
index.html.erb
:
<div ng-view=""></div>
home.html.erb
(容器内渲染):
<h1>The Home View!</h1>
<ul>
<li ng-repeat="thing in things">
{{thing}}
</li>
</ul>
home.js
:
angular.module('shibaInu')
.controller('HomeCtrl', function ($scope) {
$scope.things = ['Angular', 'Rails 4.1', 'Working', 'Together!!'];
});
app.js
:
angular
.module('shibaInu', [
'ngRoute',
'templates'
]).config(function ($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'home.html',
controller: 'HomeCtrl'
});
$locationProvider.html5Mode(true);
});
application.js
//= require jquery
//= require jquery_ujs
//= require angular
//= require angular-route
//= require angular-resource
//= require angular-rails-templates
//= require bootstrap-sprockets
//= require ng-app/app.js
//= require_tree ../templates
//= require_tree .
我做错了几件事,但我会尝试总结一下:
- 我像个好孩子一样在我的服务器部署上缩小 JS,但我没有写 minification-safe JS。请参阅下面我修复的 JS。
- 这在我原来的 post 中没有指定,但我没有像我想的那样使用
angularjs-rails
gem。我将其添加到我的项目中。
- 与上面的 2 相关,在我最初的 post 中,我曾按照文档的建议使用 bower 安装 angularjs。对于我的解决方案,我把它去掉了,因为它只是为了我的目的而把事情搞得一团糟。
新 home.js:
angular.module('shibaInu')
.controller('HomeCtrl', ['$scope', function ($scope) {
$scope.things = ['Angular', 'Rails 4.1', 'Working', 'Together!!'];
}]);
新 app.js:
angular
.module('shibaInu', [
'ngRoute',
'templates'
]).config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'home.html',
controller: 'HomeCtrl'
});
$locationProvider.html5Mode(true);
}]);
我正在使用 AngularJS 和 Rails,并遵循 http://start.jcolemorrison.com/setting-up-an-angularjs-and-rails-4-1-project/ 和其他几个教程来获得一个非常简单的 "Hello World" 示例和 运行在我的桌面上。问题是,当我将它部署到服务器时,我的基于 Angular 的代码的 none 不再有效。相反,我在控制台中收到 Uncaught ReferenceError: require is not defined
错误。
我意识到我的部分问题是浏览器不知道如何处理 'require' 函数调用,这是有道理的,所以我使用 browserify-rails 安装了 Browserify。但是,它仍然无法像我预期的那样在服务器上运行,并且出现相同的错误。
Link to the live site: Link
这是我的 application.html.erb
(简体):
<!DOCTYPE html>
<html>
<head>
<base href="/" />
<title>ShibaInu</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => false %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => false %>
<%= csrf_meta_tags %>
</head>
<body ng-app="shibaInu">
<div class="container">1 + 2 = {{ 1 + 2 }}</div>
<div class="container">
<%= yield %>
</div>
</body>
</html>
index.html.erb
:
<div ng-view=""></div>
home.html.erb
(容器内渲染):
<h1>The Home View!</h1>
<ul>
<li ng-repeat="thing in things">
{{thing}}
</li>
</ul>
home.js
:
angular.module('shibaInu')
.controller('HomeCtrl', function ($scope) {
$scope.things = ['Angular', 'Rails 4.1', 'Working', 'Together!!'];
});
app.js
:
angular
.module('shibaInu', [
'ngRoute',
'templates'
]).config(function ($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'home.html',
controller: 'HomeCtrl'
});
$locationProvider.html5Mode(true);
});
application.js
//= require jquery
//= require jquery_ujs
//= require angular
//= require angular-route
//= require angular-resource
//= require angular-rails-templates
//= require bootstrap-sprockets
//= require ng-app/app.js
//= require_tree ../templates
//= require_tree .
我做错了几件事,但我会尝试总结一下:
- 我像个好孩子一样在我的服务器部署上缩小 JS,但我没有写 minification-safe JS。请参阅下面我修复的 JS。
- 这在我原来的 post 中没有指定,但我没有像我想的那样使用
angularjs-rails
gem。我将其添加到我的项目中。 - 与上面的 2 相关,在我最初的 post 中,我曾按照文档的建议使用 bower 安装 angularjs。对于我的解决方案,我把它去掉了,因为它只是为了我的目的而把事情搞得一团糟。
新 home.js:
angular.module('shibaInu')
.controller('HomeCtrl', ['$scope', function ($scope) {
$scope.things = ['Angular', 'Rails 4.1', 'Working', 'Together!!'];
}]);
新 app.js:
angular
.module('shibaInu', [
'ngRoute',
'templates'
]).config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'home.html',
controller: 'HomeCtrl'
});
$locationProvider.html5Mode(true);
}]);