2017-07-24 12 views
1

我想在我的無服務器lambda項目中使用jquery延遲方法。然而,在要求jquery & jquery-ui作爲依賴關係之後,當我嘗試使用jquery庫時會出現以下錯誤?我是無服務器和lambda的新手,請參閱下面的handler.js函數。如何在無服務器框架中使用jquery?

TypeError: $.each is not a function 
at /vagrant/project/node_modules/jquery-ui/ui/widget.js:690:3 
at widgetUuid (/vagrant/project/node_modules/jquery-ui/ui/widget.js:24:3) 
at Object.<anonymous> (/vagrant/project/node_modules/jquery-ui/ui/widget.js:26:2) 
at Module._compile (module.js:569:30) 
at Object.Module._extensions..js (module.js:580:10) 
at Module.load (module.js:503:32) 
at tryModuleLoad (module.js:466:12) 
at Function.Module._load (module.js:458:3) 
at Module.require (module.js:513:17) 
at require (internal/module.js:11:18) 
at Object.<anonymous> (/vagrant/project/handler.js:4:19) 
at Module._compile (module.js:569:30) 
at Object.Module._extensions..js (module.js:580:10) 
at Module.load (module.js:503:32) 
at tryModuleLoad (module.js:466:12) 
at Function.Module._load (module.js:458:3) 
at Module.require (module.js:513:17) 
at require (internal/module.js:11:18) 
at AwsInvokeLocal.invokeLocalNodeJs (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:156:33) 
at AwsInvokeLocal.invokeLocal (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:114:19) 
at AwsInvokeLocal.tryCatcher (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/util.js:16:23) 
at Promise._settlePromiseFromHandler (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:512:31) 
at Promise._settlePromise (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:569:18) 
at Promise._settlePromise0 (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:614:10) 
at Promise._settlePromises (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:693:18) 
at Async._drainQueue (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:133:16) 
at Async._drainQueues (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:143:10) 
at Immediate.Async.drainQueues (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:17:14) 
at runCallback (timers.js:800:20) 
at tryOnImmediate (timers.js:762:5) 
at processImmediate [as _immediateCallback] (timers.js:733:5) 

handler.js

'use strict'; 

global.jQuery = require('jquery'); 
global.jQueryUI = require('jquery-ui'); 

var Model = require('./resources/model'); 

module.exports.project = function(event, context, callback) { 
    Model.init(); 
}; 

model.js

var JsonFile = require('jsonfile'); 
var $ = global.jQueryUI; 

module.exports = { 
    init : function() { 
     var self = this; 

     self.fetch_file().done(function(file){ 
      console.log(file); 
     }); 
    }, 

    fetch_file : function(){ 
     var deferred = $.Deferred(); 
     JsonFile.readFile('path to file', function (err, file) { 
      deferred.resolve(file); 
     }); 

     return $.when(deferred).promise(); 
    } 
}; 

的package.json

{ 
"private": true, 
    "dependencies": { 
    "avro-js": "^1.8.2", 
    "aws-sdk": "^2.88.0", 
    "jquery": "^3.2.1", 
    "jquery-ui": "^1.12.1", 
    "jsonfile": "^3.0.1" 
    }, 
    "name": "project", 
    "version": "0.1.0" 
} 

jQuery的需要,而不是jQueryUI的後,我得到這個異常:

TypeError: $.Deferred is not a function 
    at Object.fetch_schema (/vagrant/project/resources/model.js:17:26) 
    at Object.init (/vagrant/project/resources/model.js:11:14) 
    at module.exports.pixel_event_lambda_producer (/vagrant/project/handler.js:9:10) 
    at AwsInvokeLocal.invokeLocalNodeJs (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:229:12) 
    at AwsInvokeLocal.invokeLocal (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:114:19) 
From previous event: 
    at Object.invoke:local:invoke [as hook] (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:24:10) 
    at BbPromise.reduce (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:218:55) 
From previous event: 
    at PluginManager.invoke (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:218:22) 
    at PluginManager.run (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:237:17) 
    at variables.populateService.then (/usr/local/lib/node_modules/serverless/lib/Serverless.js:99:33) 
    at runCallback (timers.js:800:20) 
    at tryOnImmediate (timers.js:762:5) 
    at processImmediate [as _immediateCallback] (timers.js:733:5) 
From previous event: 
    at Serverless.run (/usr/local/lib/node_modules/serverless/lib/Serverless.js:86:74) 
    at serverless.init.then (/usr/local/lib/node_modules/serverless/bin/serverless:39:50) 
    at <anonymous> 
+0

'變量$ = global.jQueryUI;' - >'變量$ = global.jQuery;' – Andreas

+0

我嘗試使用JQuery但得到了錯誤:$ .Deferred不是函數 – Freid001

回答

0

你已經混淆了jQuery與jQuery UI。在你model.js,替換:

var $ = global.jQueryUI; 

有了:

var $ = global.jQuery; 

Deferred是一個jQuery方法,而不是一個jQuery UI的功能。

+0

我嘗試使用JQuery,但得到了錯誤:$ .Deferred不是函數 – Freid001

+0

看看'.serverless'文件夾中的zip文件夾。你看到那裏的jQuery模塊嗎? – Zanon

+0

是的我可以在裏面的zip文件夾的node_modules目錄中看到jquery模塊。無服務器 – Freid001

相關問題