Javascript库使用require(),但我没有或使用nodeJS
Javascript library uses require() but I don't have or use nodeJS?
我遇到过几个JavaScript项目和库使用这个require()函数,以便包含其他文件,像这样:
require('somefile')
我从来没有听说过,显然这是node.js的东西,我没有也不使用。
我只是想在我自己的网站上使用这些JavaScript库,但是我看到了各种各样的涉及"npm"的指令(不管那是什么)。然后据说有一个称为require .js的替代品,但这似乎使用不同的语法,如强制使用require([…])或其他东西,而我需要包括的项目只是做require(…)。
在常规html5网站中使用JavaScript项目时,处理这种要求(…)的最简单方法是什么?(即所有应该在客户端运行)
补充:我已经尝试过require.js,但它似乎不起作用。例如,somelilibrary .js中的第一行是这样的:
var assert = require('assert')
当我之前包含require.js时,然后是someelibrary .js,我得到这个错误:
未捕获的异常:错误:模块名"assert"尚未加载然而,就上下文而言:_。使用要求([])
对于任何包含require()
的东西都会发生这种情况另一个补充:我注意到有人提到"browserify"。我想包含的一些js项目也推荐这个。显然,这应该产生一个单一的准备使用。js文件,我可以包括。但
为什么他们不直接发布这个browserized .js ?我需要自己编译它的原因是什么?它应该适用于所有浏览器或网站,对吧?
这个browserify的东西,这显然是为了避免node.js,实际上似乎需要node.js本身(指令都提到"npm -g安装browserify"等)
库应该理想地支持以下内容,这取决于它的环境。假设你正在使用一个名为"MyLib.js"的库。
未检测到模块加载器
window.MyLib
Requirejs发现
define(['MyLib'], function (MyLib) {
// Do something
return {};
});
CommonJS检测到,如节点或使用browserify或wer
var MyLib = require('MyLib');
不是所有的库都符合这个,但它们应该这样做。也许您正在查看的库只支持Node。查看jQuery的源代码,可以看到如下内容:
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上,即使你可以在客户端项目中使用它们。使用这些工具不会使项目在生产环境中依赖于Node。Node仅用于开发。要安装这些工具,可以使用npm,它是一个包管理器。像Maven或Ivy一样,npm会通过从互联网上下载来安装包及其依赖项。
那些包含npm的安装指令的库应该在Node中使用,但是在被Browserify转换后可以在浏览器中使用。用npm下载这个库,然后用Browserify(你要用npm安装它,因为它本身运行在Node上)把它转换成浏览器样式。你应该得到一个可以导入到客户端项目中的JavaScript文件。
专门针对浏览器的库通常会使用Bower而不是npm作为安装方法。Bower也是一个包管理器,但它的设计目的是下载和安装为浏览器编写的库,而不是Node。如果您想要的库在Bower上可用,您可以使用bower install <lib>
下载它及其所有依赖项。Bower将把所有文件放在当前目录下的bower_components
文件夹中。然后,您可以将这些文件复制到您的项目中,或者使您的项目直接从此文件夹导入它们。
所以,browserify只是一个可以在浏览器中使用节点样式模块的工具。是的,为了使用npm和browserify,你需要安装node.js。但是这些时候你需要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
来生成您的包(您需要包含在html中的唯一脚本)。
如果您不喜欢browserify方法,您也可以使用--standalone
选项来生成UMD格式的JavaScript文件。然后,您可以简单地将其包含在html中,并在前面的示例中与window.add
一起使用。
require语句由require.js处理,它可以在javascript环境中独立使用。它是一个模块加载器,用于优化浏览器中的加载依赖项。有一个Node.js实现,但这并不意味着你必须使用Node,你可以在你的项目中包含require。
(p。s: npm是Node包管理器,在你的项目中是不必要的,除非你正在使用Node。它简化了将javascript节点模块包含到项目中的过程。
- nodejs-expressjs上传图像并显示它们
- TypeError:在不兼容的接收器nodejs上调用了方法Uint8Array.length
- NodeJS-readline暂停和恢复事件发射器(逐行读取)
- NodeJS日期格式不起作用
- Nested Q.all nodejs
- 在gump和nodejs中使用Typescript时,未定义对require和exports的引用
- Require in nodejs
- 在nodejs中使用require来访问外部javascript文件
- 为什么nodejs's require在此闭包中无法使用调试器控制台访问?可能的v8优化
- nodejs require不是全局加载对象
- NodeJS中require的排序似乎会产生错误
- Nodejs基础:如何以及在哪里可以使用require(module)
- 如何在nodejs中使用require
- require不是从单独的javascript文件NodeJS中定义的
- Javascript库使用require(),但我没有或使用nodeJS
- NodeJS:Early require dons't无权访问对象字段
- Nodejs 延迟返回 “require”
- Nodejs new require()
- Require is not defined nodejs
- Nodejs:“require”Nodejs中的模块不适用于某些文件名