当前位置: 首页 > news >正文

郑州郑州网站建设河南做网站公司广州市城市建设

郑州郑州网站建设河南做网站公司,广州市城市建设,网站seo快速排名优化,优化人员是什么意思node 是由 c 编写的#xff0c;核心的 node 模块也都是由 c 代码来实现#xff0c;所以同样 node 也开放了让使用者编写 c 扩展来实现一些操作的窗口。如果大家对于 require 函数的描述还有印象的话#xff0c;就会记得如果不写文件后缀#xff0c;它是有一个特定的匹配规则… node 是由 c 编写的核心的 node 模块也都是由 c 代码来实现所以同样 node 也开放了让使用者编写 c 扩展来实现一些操作的窗口。如果大家对于 require 函数的描述还有印象的话就会记得如果不写文件后缀它是有一个特定的匹配规则的LOAD_AS_FILE(X)1. If X is a file, load X as its file extension format. STOP2. If X.js is a file, load X.js as javascript text. STOP3. If X.json is a file, parse X.json to a javascript object. STOP4. If X.node is a file, load X.node as binary addon. STOP可以看到最后会匹配一个 .node而后边的描述也表示该后缀的文件为一个二进制的资源。而这个 .node 文件一般就会是我们所编译好的 c 扩展了。为什么要写 c 扩展可以简单理解为如果想基于 node 写一些代码做一些事情那么有这么几种选择1. 写一段 JS 代码然后 require 执行2. 写一段 c 代码编译后 require 执行3. 打开 node 源码把你想要的代码写进去然后重新编译日常的开发其实只用第一项就够了我们用自己熟悉的语言写一段熟悉的代码然后发布在 NPM 之类的平台上其他有相同需求的人就可以下载我们上传的包然后在TA的项目中使用。但有的时候可能纯粹写 JS 满足不了我们的需求也许是工期赶不上也许是执行效率不让人满意也有可能是语言限制。所以我们会采用直接编写一些 c 代码来创建一个 c 扩展让 node 来加载并执行。况且如果已经有了 c 版本的轮子我们通过扩展的方式来调用执行而不是自己从头实现一套也是避免重复造轮子的方法。一个简单的例子如果大家接触过 webpack 并且用过 sass 的话那么在安装的过程中很可能会遇到各种各样的报错问题也许会看到 gyp 的关键字其实原因就是 sass 内部有使用一些 c 扩展来辅助完成一些操作而 gyp 就是用来编译 c 扩展的一种工具。当然上边也提到了还有第三种操作方法我们可以直接魔改 node 源码但是如果你只是想要写一些原生 JS 实现起来没有那么美好的模块那么是没有必要去魔改源码的毕竟改完了以后还要编译如果其他人需要用你的逻辑还需要安装你所编译好的特殊版本。这样的操作时很不易于传播的大家不会想使用 sass 就需要安装一个 sass 版本的 node 吧。就像为了看星战还要专门下载一个优酷- -。简单总结一下写 c 的扩展大概有这么几个好处1. 可以复用 node 的模块管理机制2. 有比 JS 更高效的执行效率3. 有更多的 c 版本的轮子可以拿来用怎么去写一个简单的扩展node 从问世到现在已经走过了 11 年通过早期的资料、博客等各种信息渠道可以看到之前开发一个 c 扩展并不是很容易但经过了这么些年迭代各种大佬们的努力我们再去编写一个 c 扩展已经是比较轻松的事情了。这里直入正题放出今天比较关键的一个工具node-addon-api module以及这里是官方提供的各种简单 demo 来让大家熟悉这是一个什么样的工具node-addon-examples。需要注意的一点是 demo 目录下会分为三个子目录在 readme 中也有写分别是三种不同的 c 扩展的写法基于不同的工具。我们本次介绍的是在 node-addon-api 目录下的算是三种里边最为易用的一种了。首先是我们比较熟悉的 package.json 文件我们需要依赖两个组件来完成开发分别是 bindings 和 node-addon-api。然后我们还需要简单了解一下 gyp 的用法因为编译一个 c 扩展需要用到它。就像 helloworld 示例中的 binding.gyp 文件示例{  targets: [    {      // 导出的文件名      target_name: hello,      // 编译标识的定义 禁用异常机制注意感叹号表示排除过滤      cflags!: [ -fno-exceptions ],      // c  编译标识的定义 禁用异常机制注意感叹号表示排除过滤也就是 c  编译器会去除该标识      cflags_cc!: [ -fno-exceptions ],      // 源码入口文件      sources: [ hello.cc ],      // 源码包含的目录      include_dirs: [        // 这里表示一段 shell 的运行用来获取 node-addon-api 的一些参数有兴趣的老铁可以自行 node -p require(node-addon-api).include 来看效果        gyp 的语法挺多的这次并不是单独针对 gyp 的一次记录所以就不过多的介绍。从最简单的数字相加来实现然后我们来实现一个简单的创建一个函数让两个参数相加并返回结果。源码位置https://github.com/Jiasm/node...我们需要这样的一个 binding.gyp 文件{  targets: [    {      target_name: add,      cflags!: [ -fno-exceptions ],      cflags_cc!: [ -fno-exceptions ],      sources: [ add.cc ],      include_dirs: [        然后我们在项目根目录创建 package.json 文件并安装 bindings 和 node-addon-api 两个依赖。接下来就是去编写我们的 c 代码了#include // 定义 Add 函数Napi::Value Add(const Napi::CallbackInfo info) {  Napi::Env env info.Env();// 接收第一个参数  double arg0 info[0].As:number().DoubleValue();  // 接收第二个参数  double arg1 info[1].As:number().DoubleValue();  // 将两个参数相加并返回  Napi::Number num Napi::Number::New(env, arg0 arg1);return num;} // 入口函数用于注册我们的函数、对象等等Napi::object Init(Napi::Env env, Napi::object exports) {  // 将一个名为 add 的函数挂载到 exports 上  exports.Set(Napi::String::New(env, add), Napi::Function::New(env, Add));  return exports;} // 固定的宏使用NODE_API_MODULE(addon, Init)在 c 代码完成以后就是需要用到 node-gyp 的时候了建议全局安装 node-gyp避免一个项目中出现多个 node_modules 目录的时候使用 npx 会出现一些不可预料的问题 npm i -g node-gyp# 生成构建文件 node-gyp configure# 构建 node-gyp build这时候你会发现项目目录下已经生成了一个名为 add.node 的文件就是我们在 binding.gyp 里边的 target_name 所设置的值了。
http://www.pierceye.com/news/384952/

相关文章:

  • 永康网站设计新闻门户网站建设方案
  • 个人做网站被骗洛阳电商网站建设公司排名
  • 蒙文网站建设情况汇报设计素材网站照片
  • 南京网站设计费用wordpress讨论
  • 可以做防盗水印的网站工业设计专业最好的大学
  • 中国flash网站模板中心温州做网站软件
  • 个人网站设计论文前言搜索引擎推广的网络营销渠道
  • 中国国家建设部网站如何做网站赚流量钱
  • wordpress 网站底部美化天津seo排名扣费
  • 网站开发PHP招聘宁波梅山建设局网站
  • 免费做一建或二建题目的网站colorway wordpress
  • 简单网站建设合同贵州省高层建筑信息平台
  • 手机网站登录模板电视剧百度风云榜
  • 一嗨租车网站建设的功能特色梅林做网站
  • 网站关于我们怎么做36氪 wordpress 模板
  • 医疗网站建设计划书菏泽手机网站建设
  • 南京外贸网站建设哪家好免费网站建站方法
  • 文化馆建设网站网架公司有哪些
  • 企业如何申请网站51网站空间相册
  • 自己电脑做网站服务器系统网站建设违约交付
  • 什么叫域名访问网站wordpress app 接口
  • 学生网站建设实训总结工信部备案号查询平台
  • 凡科建站如何制作论坛备案网站需要多久
  • 网站建设的公司哪家是上市公司专业外贸网站制作
  • 建站公司杭州免费投票网站制作
  • 网站优化公司效果网络营销毕业后做什么工作
  • 移动互联网的应用论文可以优化网络的软件
  • 网站建设软件哪个最好郑州广告设计与制作公司
  • 浦口区网站建设售后保障如何维护网站
  • 企业网站建设 安全合肥做网站加盟