【发布时间】:2015-12-19 16:29:07
【问题描述】:
我正在尝试在浏览器中使用 Browerifiy,如果我使用独立选项,它会公开一个模块。我不想这样做。 网站和文档似乎在我实际编译代码后所看到的所有地方都被切断了。 没有人说过如何实际使用浏览器属性中的代码。
我有一个繁重的任务:
browserify: {
standalone: {
src: [ '<%= yeoman.server %>/shared-components/**/*.js' ],
dest: '<%= yeoman.client %>/app/js/browserifed-shared-code.js',
/* Commented out, zero documentation on this. Can only expose one module it seems.
options: {
browserifyOptions: {
standalone: 'Utility' //Unable to say '**/*' error :-/
}
}
*/
},
这似乎可行,它会生成这样的文件:
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
'use strict';
var UrlController = function(){};
UrlController.test = function () {
return 'test';
};
module.exports = UrlController;
},{}],2:[function(require,module,exports){
'use strict';
var Utility = function(){};
Utility.isASCII = function (str) {
return /^[\x00-\xFF]*$/.test(str);
};
Utility.isAlphaNumeric = function(str) {
var code, i, len;
for (i = 0, len = str.length; i < len; i++) {
code = str.charCodeAt(i);
if (!(code > 47 && code < 58) && // numeric (0-9)
!(code > 64 && code < 91) && // upper alpha (A-Z)
!(code > 96 && code < 123)) { // lower alpha (a-z)
return false;
}
}
return true;
};
module.exports = Utility;
},{}]},{},[1,2]);
我使用注入器自动包含它,其工作原理类似于:
<script src="app/js/browserifed-shared-code.js"></script>
现在我希望我可以打电话了
require('Utility');
但我明白了
Uncaught ReferenceError: require is not defined(…)
我不知道/无法在浏览器中加载这些模块。 :'-/
【问题讨论】:
-
我对你想要做什么感到困惑。 Browserify 捆绑您的代码以实现高效的客户端交付,并且可以公开一个全局(通过
standalone选项),您可以通过它访问内部。它不会把客户端变成 Nodejs,所以它不会给你require,你只是得到一个匿名加载的库,或者使用单个全局访问变量,命名为standalone。然后,您不需要“要求”您浏览客户端的东西,您只需将Utility用于Utility.whateverPropertyYouExposed、Utility.whateverFunctionYouExposed()等。 -
you simply get a library that either loads anonymously解释一下,我匿名加载它并如何访问它? (下面我已经回答了我自己的问题,因为我仍然找不到对此的解释) -
如果它是匿名加载的,你以后不会“访问它”,你写的代码应该已经能够做它需要做的一切。如果您以后需要访问它,则使用
--standalone标志进行编译,然后确保入口点代码公开您需要访问的所有内容。
标签: javascript node.js gruntjs npm browserify