簡體   English   中英

包括帶有html和node.js的js文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM