Node.js 如何在浏览器中查找npm包的哪些部分工作,以及哪些部分不';T
据我所知,几乎所有的NPM软件包(即npmjs.org上列出的软件包)都使用Require.js这样的加载程序,在浏览器中像一个符咒一样工作。但是很明显,NPM包的一些特性(例如,访问OS文件系统)不能在浏览器中使用,我假设如果尝试使用它,会导致不正常的错误Node.js 如何在浏览器中查找npm包的哪些部分工作,以及哪些部分不';T,node.js,requirejs,Node.js,Requirejs,据我所知,几乎所有的NPM软件包(即npmjs.org上列出的软件包)都使用Require.js这样的加载程序,在浏览器中像一个符咒一样工作。但是很明显,NPM包的一些特性(例如,访问OS文件系统)不能在浏览器中使用,我假设如果尝试使用它,会导致不正常的错误 我的理解有多正确 有什么方法可以准确地确定NPM包中哪些方法在浏览器中有效,哪些不有效 事实上,我相信当使用类似的东西时,您几乎可以毫无问题地要求每个包。。。根据Browserify文档: 许多不执行IO的npm模块在安装完成后即可工作 棕
事实上,我相信当使用类似的东西时,您几乎可以毫无问题地要求每个包。。。根据Browserify文档: 许多不执行IO的npm模块在安装完成后即可工作 棕色化。其他人需要更多的工作 许多节点内置模块已包装,以便在浏览器中工作, 但仅当您明确要求()或使用其功能时 但是,我对Browserify没有经验,所以我不能向您保证;但我可以肯定地说,在任何应用程序中,它都是一个额外的层。“它需要它吗?”在这样的时刻应该被问到 由于我是一个只喜欢使用npm管理Node.js包的人,我反对在浏览器中以这种方式使用它们。
大多数与浏览器兼容的软件包在为此目的进行测试时会通知用户(未经测试的软件包不值得使用!mwahaha!) 据我所知,几乎所有的NPM软件包(即npmjs.org上列出的软件包)都使用Require.js这样的加载程序,在浏览器中像一个符咒一样工作 一般来说,npm模块作为CommonJS模块公开,不能在浏览器中使用,除非您使用类似的东西。但是,如果模块将自身公开为CommonJS和AMD模块,则可以在浏览器中使用AMD加载程序(如RequireJS)。如果代码库中有类似于此代码段的内容,则可以确定模块是否与AMD兼容:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(factory);
} else if (typeof exports === 'object') {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like enviroments that support module.exports,
// like Node.
module.exports = factory();
} else {
// Browser globals (root is window)
root.returnExports = factory();
}
}(this, function () {
// Just return a value to define the module export.
// This example returns an object, but the module
// can return a function as the exported value.
return {};
}));
您可以找到有关CommonJS、AMD和UMD的更多信息
但是很明显,NPM包的一些特性(例如,访问OS文件系统)不能在浏览器中使用,我假设如果尝试使用它,会导致不正常的错误
没错,大多数IO的NPM模块都不能在浏览器中工作。如果您计划使用Browserify在浏览器中使用CommonJS模块,请查看on Browserify。啊,非常好的信息和答案。我唯一剩下的问题是,我如何通过编程(并确定)确定给定模块是否具有内置AMD功能?当然有一个库函数或API,我可以问“这个模块是否公开AMD?”不幸的是,没有这样的库。检查源代码是最终的真理。或者,您可以使用一个简单的伪AMD实现,如下所示:
function define(func){alert('Hey,this is AMD')};define.amd=true
。如果您加载支持AMD的模块,那么它将使用define
自注册。此时,代码片段将提示警报。很黑,但它确实有用。