Javascript库使用require()但我不使用';没有或使用nodeJS?

Javascript库使用require()但我不使用';没有或使用nodeJS?,javascript,node.js,npm,require,Javascript,Node.js,Npm,Require,我遇到了几个JavaScript项目和库,它们使用这个require()函数来包含其他文件,如下所示: require('somefile') if ( typeof module === "object" && typeof module.exports === "object" ) { // For CommonJS and CommonJS-like environments where a proper window is present, // exe

我遇到了几个JavaScript项目和库,它们使用这个require()函数来包含其他文件,如下所示:

require('somefile')
if ( typeof module === "object" && typeof module.exports === "object" ) {
    // For CommonJS and CommonJS-like environments where a proper window is present,
    // execute the factory and get jQuery
    // For environments that do not inherently posses a window with a document
    // (such as Node.js), expose a jQuery-making factory as module.exports
    // This accentuates the need for the creation of a real window
    // e.g. var jQuery = require("jquery")(window);
    // See ticket #14549 for more info
    module.exports = global.document ?
        factory( global, true ) :
        function( w ) {
            if ( !w.document ) {
                throw new Error( "jQuery requires a window with a document" );
            }
            return factory( w );
        };
} else {
    factory( global );
}
我从没听说过,很明显,这是node.js的一部分,我没有也没有使用过

我只是想在我自己的网站上使用这些JavaScript库,但我看到了各种涉及“npm”(不管是什么)的说明。然后应该有一个替代调用,但它似乎使用了不同的语法,比如强制使用require([…])或其他什么,而我需要包含的项目只需要require(…)

在常规html5网站中使用JavaScript项目时,最简单的方法是什么?(即,所有应运行客户端)


另外:我已经尝试过require.js,但它似乎不起作用。例如,somelibrary.js中的第一行是:

var assert = require('assert')
当我之前包含require.js,然后是somelibrary.js时,我得到了以下错误:

未捕获异常:错误:尚未加载模块名“assert” 然而,对于上下文:u。使用require([])

任何包含require()的内容都会发生这种情况


另外:我注意到有人提到“browserify”。我试图包括的一些js项目也推荐这个。显然,这应该生成一个我可以包含的现成的.js文件。但是

  • 他们为什么不直接发布这个browserified.js呢?我需要自己编译它有什么原因吗?它应该是所有浏览器或网站的通用工具,对吗

  • 这个browserify的东西,显然是为了避免node.js,实际上似乎需要node.js本身(说明中都提到“npm-g安装browserify”等)


  • require语句由处理,可以在javascript环境中独立使用。它是一个模块加载器,用于优化浏览器中的加载依赖项。它有一个Node.js实现,但这并不意味着您必须使用Node,您可以在项目中包含require


    (注意:npm对您的项目来说是不必要的,除非您使用的是Node。它简化了在项目中包含javascript节点模块的过程。)

    库最好支持以下功能,具体取决于它的环境。假设您正在使用一个名为“MyLib.js”的库

    未检测到模块加载程序

    window.MyLib
    
    define(['MyLib'], function (MyLib) {
      // Do something
      return {};
    });
    
    Requirejs检测到

    window.MyLib
    
    define(['MyLib'], function (MyLib) {
      // Do something
      return {};
    });
    
    检测到CommonJS,如节点或使用browserify或bower

    var MyLib = require('MyLib');
    
    并非所有LIB都符合这一点,但它们应该符合这一点。可能您正在查看的库只支持节点。查看jQuery的源代码,您会看到如下内容:

    require('somefile')
    
    if ( typeof module === "object" && typeof module.exports === "object" ) {
        // For CommonJS and CommonJS-like environments where a proper window is present,
        // execute the factory and get jQuery
        // For environments that do not inherently posses a window with a document
        // (such as Node.js), expose a jQuery-making factory as module.exports
        // This accentuates the need for the creation of a real window
        // e.g. var jQuery = require("jquery")(window);
        // See ticket #14549 for more info
        module.exports = global.document ?
            factory( global, true ) :
            function( w ) {
                if ( !w.document ) {
                    throw new Error( "jQuery requires a window with a document" );
                }
                return factory( w );
            };
    } else {
        factory( global );
    }
    

    现在,Node.js被大量用于管理JavaScript项目,即使该项目是客户端的。例如,Grunt、Bower、Browserify、Gulp和许多其他构建工具都在Node.js上运行,即使您可以在客户端项目上使用它们。使用这些工具不会使项目依赖于生产中的节点。节点仅用于开发。要安装这些工具,可以使用npm,它是一个包管理器。与Maven或Ivy一样,npm将通过从internet下载来安装软件包及其依赖项

    包含npm的安装说明的库应在节点中使用,但可在使用Browserify转换后在浏览器中使用。使用npm下载库,然后使用Browserify将其转换为浏览器样式(您可以使用npm安装它,因为它本身在节点上运行)。您应该得到一个可以导入到客户端项目中的JavaScript文件


    特别针对浏览器的库通常将Bower称为安装方法,而不是npm。Bower也是一个包管理器,但它的设计目的是下载和安装为浏览器编写的库,而不是节点。如果您想要的库在Bower上可用,您可以通过
    Bower安装
    下载它及其所有依赖项。Bower将把所有文件放在当前目录的
    Bower\u components
    文件夹中。然后,您可以将这些文件复制到项目中,或者让项目直接从此文件夹中导入它们。

    因此,browserify只是一个工具,它可以在浏览器中使用节点样式模块。是的,您确实需要安装node.js才能使用npm和browserify。但是,现在大多数前端工具集都需要node.js

    npm中充满了用JavaScript编写并在浏览器中运行的模块。使用browserify,您可以在浏览器中使用这些模块

    它通过填充整个
    require
    机制并使其在浏览器中工作来工作。这也意味着您可以在模块中组织代码:

    // add.js
    module.exports = function(x, y) {
        return x + y;
    }
    
    // app.js
    var add = require('./add.js');
    var result = add(7, 8);
    
    现在,只需运行
    browserify app.js-o bundle.js
    ,就可以生成您的bundle(您需要包含在html中的唯一脚本)


    如果您不喜欢browserify方法,您还可以使用
    --standalone
    生成格式为的JavaScript文件。然后,您可以简单地将其包含在html中,并与
    窗口一起使用。在前面的示例中添加

    RequireJS是一个JavaScript文件和模块加载器。它针对浏览器内使用进行了优化,但也可用于其他JavaScript环境,如Rhino和Node我尝试了require.js,但似乎没有解决我的问题,请参见上面的编辑这些库是否有
    package.json
    文件?是的,我通常会看到这些“package.json”文件。好的,这意味着这些库遵循CommonJS模块语法,并且可能是您的代码所需要的。但是您需要使用browserify,这是一个额外的构建步骤。你应该看看上面的描述。它很容易开始使用,并且您可以使用中的大多数库。我尝试了require.js,但似乎不支持