Javascript 共享browserify文件中的代码

Javascript 共享browserify文件中的代码,javascript,html,node.js,browserify,Javascript,Html,Node.js,Browserify,我有一个JavaScript库,它使用Browserify来保持代码模块化 库本身使用基本的Browserify功能来要求其他JS文件 myLibrary.js var utils = require('helpers/utils.js') console.log("Hello, I am logging from myLibrary") function my_api(){ utils.someFn() } my_api() var util = require("utils.js")

我有一个JavaScript库,它使用Browserify来保持代码模块化

库本身使用基本的Browserify功能来要求其他JS文件

myLibrary.js

var utils = require('helpers/utils.js')
console.log("Hello, I am logging from myLibrary")
function my_api(){
  utils.someFn()
}
my_api()
var util = require("utils.js")
window.myGlobalObjWithAUniqueName = {
  myFn: function(){
    util.someHelper()
  }
}
myGlobalObjWithAUniqueName.myFn()
我正在使用Gulp浏览myLibrary.js,它正在正确构建中,我已经在myLibrary.js中放入了几个日志,当我在一个示例html文件中加载该文件时,我可以看到这些日志

我有一个使用myLibrary.js的示例index.html文件,我希望我的api可以从index.html访问

index.html

<script src="my_url/myLibrary.js"></script>
<script src="app.js"></script>
<script src="browserified_myLibrary.js"></script>
<script src="app.js"></script>
铬合金控制台

Hello I am logging from myLibrary (myLibrary.js)
Uncaught ReferenceError: my_api is not defined (app.js)

我已经尝试推迟app.js的加载,直到myLibrary.js准备就绪,但我开始认为这不是问题。

您需要导出公共函数

module.exports = {my_api: my_api};

我最终使用的解决方案是公开一个全局对象,其中包含我希望通过myLibrary使用window对象公开的所有方法

myLibrary.js需要一个实用程序函数文件,并将其用作我要公开的方法中的助手

myLibrary.js

var utils = require('helpers/utils.js')
console.log("Hello, I am logging from myLibrary")
function my_api(){
  utils.someFn()
}
my_api()
var util = require("utils.js")
window.myGlobalObjWithAUniqueName = {
  myFn: function(){
    util.someHelper()
  }
}
myGlobalObjWithAUniqueName.myFn()
然后,我使用Browserify创建新的browserified_myLibrary.js,并在我想加载它的任何文件中使用它的方法

index.html

<script src="my_url/myLibrary.js"></script>
<script src="app.js"></script>
<script src="browserified_myLibrary.js"></script>
<script src="app.js"></script>

不确定这是否是最好的方法,但这似乎适合我的需要,即模块化客户端库并使用它,而不必每次使用它时都使用Browserify。

您可能还想查看Browserify公开的
--standalone
选项:

当opts.standalone为非空字符串时,将使用该名称和umd包装创建一个独立模块。您可以在独立全局导出中使用名称空间。在字符串名称中作为分隔符,例如“a.B.C”。全球出口将进行消毒和骆驼套


中,您的browserify输出可能封装了所有代码。不太熟悉Browserify,但请尝试返回my_api或
module.exports=my_api
我希望能够通过html文件加载myLibrary中的函数。如果我要这样做的话,我必须在我使用这个文件的地方使用Browserify。我想用Browserify实现的目标不可能吗?我不明白你在问什么。正如您所看到的,该文件不会在模块范围之外公开
my_api
。我希望myLibrary公开my_api,以便我可以使用脚本标记将myLibrary.js加载到任何html文件中并调用my_api。我想使用Browserify,这样我就可以将我的库分解成多个js文件。我想问的是,是否可以将使用Browserify(myLibrary.js)构建的文件中的函数公开给不使用Browserify(index.html/app.js)的项目例如:如果您要在项目中使用myLibrary.js,那么我更希望您使用脚本标记加载它,而不是强制您使用Browserify来要求它。您正在尝试使用使用commonJS格式编写的js文件。您只能在使用类似Browserify的浏览器中使用它@我不同意你的建议,消费者不应该使用Browserify。绝对不应该用函数污染全局名称空间!