Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在浏览器中查找npm包的哪些部分工作,以及哪些部分不';T_Node.js_Requirejs - Fatal编程技术网

Node.js 如何在浏览器中查找npm包的哪些部分工作,以及哪些部分不';T

Node.js 如何在浏览器中查找npm包的哪些部分工作,以及哪些部分不';T,node.js,requirejs,Node.js,Requirejs,据我所知,几乎所有的NPM软件包(即npmjs.org上列出的软件包)都使用Require.js这样的加载程序,在浏览器中像一个符咒一样工作。但是很明显,NPM包的一些特性(例如,访问OS文件系统)不能在浏览器中使用,我假设如果尝试使用它,会导致不正常的错误 我的理解有多正确 有什么方法可以准确地确定NPM包中哪些方法在浏览器中有效,哪些不有效 事实上,我相信当使用类似的东西时,您几乎可以毫无问题地要求每个包。。。根据Browserify文档: 许多不执行IO的npm模块在安装完成后即可工作 棕

据我所知,几乎所有的NPM软件包(即npmjs.org上列出的软件包)都使用Require.js这样的加载程序,在浏览器中像一个符咒一样工作。但是很明显,NPM包的一些特性(例如,访问OS文件系统)不能在浏览器中使用,我假设如果尝试使用它,会导致不正常的错误

  • 我的理解有多正确
  • 有什么方法可以准确地确定NPM包中哪些方法在浏览器中有效,哪些不有效

  • 事实上,我相信当使用类似的东西时,您几乎可以毫无问题地要求每个包。。。根据Browserify文档:

    许多不执行IO的npm模块在安装完成后即可工作 棕色化。其他人需要更多的工作

    许多节点内置模块已包装,以便在浏览器中工作, 但仅当您明确要求()或使用其功能时

    但是,我对Browserify没有经验,所以我不能向您保证;但我可以肯定地说,在任何应用程序中,它都是一个额外的层。“它需要它吗?”在这样的时刻应该被问到

    由于我是一个只喜欢使用npm管理Node.js包的人,我反对在浏览器中以这种方式使用它们。
    大多数与浏览器兼容的软件包在为此目的进行测试时会通知用户(未经测试的软件包不值得使用!mwahaha!)

    据我所知,几乎所有的NPM软件包(即npmjs.org上列出的软件包)都使用Require.js这样的加载程序,在浏览器中像一个符咒一样工作

    一般来说,npm模块作为CommonJS模块公开,不能在浏览器中使用,除非您使用类似的东西。但是,如果模块将自身公开为CommonJSAMD模块,则可以在浏览器中使用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
    自注册。此时,代码片段将提示警报。很黑,但它确实有用。