【发布时间】:2015-06-14 01:52:52
【问题描述】:
这是我第一次涉足任何前端开发,除了基本的 jQuery 东西,我正在使用 Vue.js 以及其他一些带有 Browserify 的包。我的主要“app.js”如下所示:
window.$ = window.jQuery = require('jquery');
require('bootstrap');
var moment = require('moment');
var fullCalendar = require('./vendor/fullcalendar.min.js');
var datetimepicker = require('./vendor/bootstrap-datetimepicker.min.js');
var select2 = require('./vendor/select2.min.js');
var VueResource = require('vue-resource');
var Vue = require('vue');
require('./videos/show.js');
require('./home.js');
require('./search.js');
Vue.use(VueResource);
new Vue({
el: '#search',
data: {
message: 'Hello World!'
},
});
...
它以这种方式按预期工作,但是当我尝试在另一个文件中(例如在 search.js 中)创建一个新的 Vue 实例时,我做不到。我在控制台中收到“未捕获的引用错误:未定义 Vue”。在其他地方使用其他必需的包没有问题 - 虽然我不明白为什么我需要以我正在做的方式导入 jQuery ......如果我这样做它将无法工作:
var $, jQuery = require('jquery');
我确信这是我还不理解的非常基本和基本的东西,但任何帮助将不胜感激!
【问题讨论】:
-
你是否像上面的文件一样将 Vue 导入到 search.js 中?使用 CommonJS,您不希望也不应该使用全局变量。您将需要每个文件中的每个依赖项。
-
我还看到很多
require调用,而没有将需要的东西分配给某些东西——我希望看到var x = require('x')... 这表明你正在使用很多全局变量,这又是一种气味。如果是针对 jQuery 之类的东西,但针对您自己的模块,这是一回事,这表明该概念的某些部分没有意义。我建议在点击之前阅读更多指南。 -
是的,我想我错过了基本概念。之前,我在登录页面上有一个脚本,该脚本将使用 jstimezonedetect 获取用户的时区并将其存储在一个隐藏的输入中,我将与用户的凭据一起发送到服务器。现在,如果我需要该脚本,则在每次页面加载时都会调用该函数,并且该脚本会尝试将其返回值分配给 $('#timezone') 元素。对我来说没有意义。我所有的 js 都对特定页面上的特定元素进行操作。你有什么建议可以阅读以加快速度吗?
-
Hrm... "The Secrets of the JavaScript Ninjas" 真的很好,但我不知道它是否对这个特定案例有那么大的帮助。你快到了!对于隐藏字段的问题——创建模块但不运行模块中的代码——模块可以返回一个函数,你需要像
var addHiddenField = require('./something');这样需要它的模块,然后像@一样使用它987654326@只在您需要的地方!您的模块应该几乎总是返回一个值(即10)、一个函数或一个对象。然后你在需要它之后对模块做一些事情。
标签: javascript browserify