[英]including js files with html and node.js
我正在通過websot在HTML5客戶端和node.js上運行的服務器之間執行消息傳遞。 當然,我選擇JSON作為消息格式,因此創建了常見的javascript代碼,定義了各種消息內容類型和轉換操作。 javascript代碼在兩個項目之間共享。
我創建了我的Web客戶端作為一個git項目和我的服務器作為另一個git項目。 部分是因為我使用phonegap為各種基於觸摸的環境構建基於webkit的客戶端。 它也是各種邏輯的一個很好的分離。
為了共享公共代碼,我為公共邏輯創建了一個單獨的項目,並使用git的子項目將代碼“導入”到另外兩個項目中。
現在這適用於基於html5的項目,因為我可以執行以下操作來包含代碼:
<script src="common/js/comms.js" type="text/javascript"></script>
但是對於節點,我在嘗試獲取代碼時遇到了問題。 為了獲得代碼,我最終做了以下事情:
var fs = require('fs');
eval(fs.readFileSync('./common/js/comms.js').toString());
雖然我采取的方法有效,但我注意到,當我有依賴關系時,它開始變得非常混亂(例如,如果我想要a.js,我需要x.js,y.js和x.js),而我必須為希望使用任何這些實體的每個node.js js文件執行此操作。
我也不習慣使用eval
方法。 我沒有安全問題,雖然我想使用嚴格模式,我的理解是eval和嚴格的模式像石油和水一樣。
所以我的問題是,在html項目和node.js項目之間包含共享js文件的最佳方法是什么? 我更喜歡嚴格遵守的事情。
我應該注意到,盡管圍繞這個主題有幾個問題,我找不到任何解決我提出的具體問題的問題。 我還要補充一點,我不希望“服務”來自'服務器'的文件。 HTML5客戶端應該是“獨立的”。
為了澄清,我在'common js files'中的內容如下:
var Comms = function (options) {
...
}
在HTML5中,我可以通過new Comms()
引用,這也是我想在node.js中做的事情。
您是否研究過Node模塊的工作原理? 如果您正在使用此模式進行開發,則在服務器上使用require('./common/js/comms')
相當簡單,同時仍將其包含在您的客戶端上。
本文應指出正確的方向: https : //caolan.org/posts/writing_for_node_and_the_browser.html
以下是Tyler在下面的評論中鏈接的代碼。
示例(example.js):
if(typeof exports == "undefined"){
exports = this;
}
Example = function() {
this.init();
};
Example.prototype = {
init: function() {
console.log('hello world');
}
};
exports.Example = new Example();
example.js(app.js)的node.js用法:
example = require('./example');
example.js(index.html)的html用法:
<html>
<head>
<title></title>
</head>
<body>
<script src="./example.js"></script>
</body>
OP的更改是將exports.Example
分配給Example
而不是新實例。 因此node.js邏輯可以使用以下內容:
var Example = require('./example.js').Example;
var foo = new Example();
這樣原來的問題就解決了。
看看nodeJS模塊 。
將在comm.js:
module.exports = function(/* any dependency? */){
// things
// you can return some object
}
在文件中你需要comm.js
require('./common/js/comm.js')();
// or you can assign it to a variable if it returned something
希望有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.