为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。
创建 hello.js 文件
exports.world = function () {
console.log('Hello World');
创建 your.js 文件
一个对象封装到模块中
function Your() {
var name;
this.setName = function (thyName) {
name = thyName;
this.sayHello = function () {
console.log('Hello ' + name);
module.exports = Your;
这样就可以直接获得这个对象了.
创建模块main.js
var hello = require('./hello');
var Your = require('./your');
hello.world();
let yours = new Your();
yours.setName("马玉欧辰");
yours.sayHello();
代码 require(’./hello’) 引入了当前目录下的 hello.js 文件(./ 为当前目录,node.js 默认后缀为 js)。
exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。
为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。创建 hello.js 文件exports.world = function () { console.log('Hello World');}创建 your.js 文件一个对象封装到模块中function Your() { var name; this.setName = function...
Node.js是一个完整的JavaScript开发环境,并且是基于Google的ChromeV8引擎进行代码解释的。它在设计之初就已经定位用来解决传统Web开发语言所遇到的诸多问题,所以Node.js具有其他开发语言不具备的优点,包括事件驱动、异步编程等。
Node.js标准库。这部分是由JavaScript编写的,即我们使用过程中能直接调用的API。在源码中的lib目录下可以看到。
No...
在nodejs/elctron中,可以通过node-ffi,通过Foreign Function Interface调用动态链接库,俗称调DLL,实现调用C/C++代码,从而实现许多node不好实现的功能,或复用诸多已实现的函数功能。
node-ffi是一个用于使用纯JavaScript加载和调用动态库的Node.js插件。它可以用来在不编写任何C ++代码的情况下创建与本地DLL库的绑定。同时它负责处理跨JavaScript和C的类型转换。
与Node.js Addons相比,此方法有如下优点:
区别:module.exports可以直接复制,例如module.exports=1,而exports不能直接赋值
module.exports = 1//right
exports = 1//err
2.exports与mod
nodejs中的开发模式 --
模块化开发
因为开发的项目一般比较大,不会将所有的代码写都在同一个文件中。这样只能执行一个文件
nodejs这样就无法分工合作
为了解决这问题,可以使用
模块化开发技术
模块化开发:在一个文件中可以
引入另一个文件
0x01 概述
使用electron开进行桌面程序的开发,似乎成了WEB前端开发人员转桌面程序开发的首选。近期有一些使用在electron中使用加密锁的需求,学习了一下在Node.js中通过ffi-napi模块调用动态链接库,把几款加密锁产品的动态库使用javascript封装了一下,实现了electron中使用加密锁功能。
开发过程中遇到了一些问题,踩了一些坑,这里总结记录一下。这里使用接口函数参数类型比较复杂的ROCKEY-ARM的动态链接库来进行开发。
NOTE: javascript封装的ROCK
import * as Excel from 'excel
js'; ; // 如果是
js则为 var Excel = require('excel
js');
import * as Stream from 'stream';
import { CellData } from '../m...
要在 Node.js 中编写 C 模块,需要使用 Node.js 提供的 C++ API。下面是一个简单的示例,展示了如何编写一个 C++ 模块并将其导出到 Node.js 中:
首先,创建一个名为 `example.cpp` 的文件,其中包含以下代码:
```cpp
#include <node.h>
using namespace v8;
// 定义一个函数,接受两个参数并返回它们的和
void Add(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
if (args.Length() < 2) {
isolate->ThrowException(
Exception::TypeError(String::NewFromUtf8(isolate, "参数数量不正确")));
return;
if (!args[0]->IsNumber() || !args[1]->IsNumber()) {
isolate->ThrowException(
Exception::TypeError(String::NewFromUtf8(isolate, "参数必须是数字")));
return;
double value =
args[0].As<Number>()->Value() + args[1].As<Number>()->Value();
Local<Number> num = Number::New(isolate, value);
args.GetReturnValue().Set(num);
// 导出 Add 函数
void Init(Local<Object> exports) {
NODE_SET_METHOD(exports, "add", Add);
// 声明初始化函数
NODE_MODULE(NODE_GYP_MODULE_NAME, Init)
这个文件定义了一个名为 `Add` 的函数,该函数接受两个参数,并返回它们的和。该文件还定义了一个名为 `Init` 的初始化函数,该函数将 `Add` 导出到 Node.js 中。最后,该文件使用 `NODE_MODULE` 宏将 `Init` 与模块名关联起来。
接下来,使用 `node-gyp` 工具将 C++ 模块编译为 Node.js 可以加载的二进制文件。创建一个名为 `binding.gyp` 的文件,其中包含以下内容:
```json
"targets": [
"target_name": "example",
"sources": [ "example.cpp" ]
该文件指定了编译目标 `example`,并将 `example.cpp` 文件作为源文件。使用以下命令将模块编译为 Node.js 可以加载的二进制文件:
$ node-gyp configure build
最后,在 Node.js 中加载模块并使用它。创建一个名为 `app.js` 的文件,其中包含以下内容:
```js
const addon = require('./build/Release/example.node');
console.log('1 + 2 =', addon.add(1, 2));
该文件加载 C++ 模块,并使用 `addon.add` 调用 `Add` 函数。运行以下命令运行应用程序:
$ node app.js
输出应该显示 `1 + 2 = 3`。