据我了解,几乎所有NPM软件包(即在npmjs.org上列出)在浏览器中使用诸如Require.js之类的加载器。但显然NPM软件包的一些功能(例如,访问操作系统文件系统)不能在浏览器中使用,我认为如果尝试它会导致错误的错误。
答案 0 :(得分:2)
据我所知,几乎所有的NPM软件包(即在npmjs.org上列出的)都像浏览器中的一个魅力一样,使用诸如Require.js之类的加载器。
一般来说,npm模块作为CommonJS模块公开,除非使用Browserify之类的东西,否则不能在浏览器中使用。但是,如果模块将自身公开为CommonJS AND 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 here的更多信息。
但显然NPM软件包的一些功能(例如,访问操作系统文件系统)不能在浏览器中使用,如果尝试的话,我认为会导致错误的错误。
你是对的,IO的大多数NPM模块都不能在浏览器中运行。如果您打算使用Browserify在浏览器中使用CommonJS模块,请查看Browserify上的list of compatible modules。
答案 1 :(得分:1)
实际上,我相信在使用像Browserify之类的东西时,几乎每个包都没有太多问题......根据Browserify文档:
许多没有执行IO的npm模块只会在工作之后才能工作 browserified。其他人则需要更多的工作。
许多节点内置模块已被包装在浏览器中工作, 但只有在明确要求(或使用其功能)时才会使用。
然而,我不是对Browserify有经验,所以我无法确保它;但我可以肯定地说,这将是任何应用程序中的额外层。 “它需要它吗?”应该在这样的时刻被问到。
由于我是一个喜欢用npm管理Node.js包的人,我不反对尝试在浏览器中使用它们。
大多数浏览器兼容的软件包会在为此目的进行测试时通知用户(未经测试的软件包不值得使用! mwahahah!)。