Я использую узел v6.14.4 в Mac OS (V 10.13.6, Darwin Kernel Version 17.7.0)
Я пытался использовать dtrace, чтобы увидеть, какие файлы открываются при запуске моего скрипта. Я обнаружил, что мой код узла, который открывает файл с помощью метода fs.readAsync (), не виден dtrace, если мне требуются модули request и requestPromise. Это верно, даже если я не использую какие-либо функции в этих модулях. Если я включу только одну или другую, то dtrace покажет вызов fs.readAsync (как системный вызов os open ()).
Моя версия модулей запроса:
"request": "^2.88.0",
"request-promise-native": "^1.0.5"
Моя тестовая программа довольно проста:
// ------------------------------------------
const request = require('request-promise-native');
const request2 = require('request');
var fs = require('fs')
const myFile='./cacert.pem'
fileContent = fs.readFileSync(myFile);
//-------------------------------------
Кто-нибудь знает, что может вызвать такое поведение? Мне не нужно включать оба модуля, и я столкнулся с этим только по ошибке, но я хочу понять, что может привести к тому, что dtrace / dtruss не будет работать, поэтому я мог избежать этого в прошлом.
В качестве примечания я использовал dtrace, чтобы увидеть, какие файлы сертификатов CA этот узел может открывать по умолчанию, когда я использую модуль запроса. Я читал, что в более ранних версиях Node был жестко запрограммирован список сертификатов CA, и я хотел узнать, использует ли моя версия файл или местоположение по умолчанию для поиска сертификатов. После того, как я включил только модуль запроса и предположительно вижу все вызовы open (), похоже, что узел / запрос не открывает файл по умолчанию и поэтому все еще использует встроенные сертификаты CA. Дальнейшая поддержка этого (без рассмотрения самого кода) заключается в том, что при запуске «strings -a» с исполняемым файлом узла отображается 143 вхождения:
-----BEGIN CERTIFICATE-----
указывает на наличие сертификатов, встроенных в двоичный файл.
Я знаю, что могу переопределить это поведение и указать CAFile в параметрах агента при выполнении запроса запроса или установить этот файл в глобальном агенте так, чтобы все вызовы запроса / https использовали это.
Некоторое время я был в замешательстве, потому что у NPM есть файл .npmrc по умолчанию, который принимает такие параметры, как cafile, для управления этим. Однако потом я понял, что это относится только к npm, а не к моим приложениям для узлов.
Заранее спасибо за любые мысли.