![](/img/trans.png)
[英]Browserify-ed code on a server: how to get “window”, “location” and other “window” properties and typically browser objects?
[英]Run browserify-ed app in NodeJS
這聽起來有些不對勁,但我想改編相當大的JavaScript代碼庫的一部分,以便可以在NodeJS上運行。 該代碼是寫在CommonJS的風格,具有gulp
使用的構建過程browserify
和deamdify
。 我沒有設置任何東西,只是非常熟悉AMD vs CommonJS模式。
我想這樣做是為了將某些代碼轉換為服務器端API,以提高性能-但它仍需要能夠在瀏覽器中運行。
一開始我以為我可以不用運行browserify就能簡單地使用這些庫,但是遇到了這樣的錯誤:
ReferenceError:定義未定義
因為有些庫是這樣寫的:
/*global define*/
define([
'./defaultValue'
], function(
defaultValue) {
"use strict";
所以看起來我需要運行deamdify
,這是一個deamdify
轉換...因此我需要運行browserify嗎?
但是,它的一個缺點似乎是生成了一個整體的Javascript
文件(當然),然后將其全部解析,並失敗了,因為它包含對瀏覽器對象( document.location
)的引用(不存在)。 我希望只是不使用引用瀏覽器對象的代碼段。
所以我的問題是:
- 關於如何進行有任何指導嗎? 有教程嗎? 我在Google上找不到很多東西,但是我可能使用了錯誤的術語。
- 是否有一個與Browserify等效的NodeJS? 構建整體的Javascript文件然后運行該服務器端似乎有點不可思議和不必要。
任何指導,建議等都非常歡迎。
1)在節點內部使用(大型)瀏覽器代碼庫可能會很困難。 我想創建一個為節點提供偽造的瀏覽器環境的環境模塊可以完成這項工作,盡管這可能需要很多工作,但是您必須將每個瀏覽器環境對window
引用都更改為對環境模塊的引用。 您可以在那里確定代碼在哪個環境中運行並提供適當的行為(例如,在瀏覽器中返回window
對象,以及在節點環境中返回不同的對象)。
2)首先:browserify是一個運行在nodejs之上的庫,所以“等效於Browserify的NodeJS”沒有意義...避免使用單個javascript文件:有些節點模塊使您可以在其中使用AMD模塊節點(例如amdrequire , node-amd-loader ),也許可以幫上忙。 另一種方法是將AMD模塊轉換為節點模塊-這取決於AMD模塊的數量。
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.