Позвольте мне описать мою проблему.Я разработал приложение Node.js с ES6, это REST API, использующий несколько модулей Node, особенно из Google-облака, потому что я использую Google Cloud Vision и Translate API.
До сих пор проблем не было, все работает как положено, но все пошло не так, когда я захотел запустить его как службу на Windows Server.Я нашел способ сделать это здесь , используя Node-модуль "node-windows".
Я сделал служебный скрипт, как в этом посте, и служба была установлена и показана в списке служб Windows, но когда я нажимаю, чтобы запустить, она немедленно останавливается.
После некоторого анализа я вспомнил, что использую ES6, который необходимо перенести в ES5, чтобы работать как стандартный скрипт Node, поэтому я подумал, что создание всего моего приложения с помощью веб-пакета решит эту проблему для меня, но не совсем, Я получил свой bundle.js с помощью веб-пакета без каких-либо ошибок (только некоторые предупреждения), затем, когда я пытаюсь запустить его с node ./bundle.js
, он возвращает ошибки вроде:
Error: The include '/protos/google/cloud/vision/v1/image_annotator.proto' was not found.
Хотя я установил правило в своем конфигурационном файле веб-пакета для поддержки файлов .proto.
Это мой webpack.config.js :
module.exports = {
target: "node",
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
}
},
{
test: /\.json$/,
exclude: /node_modules/,
use: {
loader: "json-loader"
}
},
{
test: /\.proto$/,
use: {
loader: "pbf-loader"
}
},
{
test: /\.html$/,
use: {
loader: "html-loader"
}
}
]
}
};
На этом уровнеЯ понятия не имею, как сделать эти файлы .proto google-cloud интегрируемыми в мой bundel.js, может кто-нибудь, пожалуйста, подскажите мне?спасибо.
Это код из grpc.js внутри модуля @ google-cloud, который пытается разрешить пути к файлам .proto:
GoogleProtoFilesRoot.prototype.resolvePath = function (originPath, includePath) {
originPath = path.normalize(originPath);
includePath = path.normalize(includePath);
// Fully qualified paths don't need to be resolved.
if (path.isAbsolute(includePath)) {
if (!fs.existsSync(includePath)) {
throw new Error('The include `' + includePath + '` was not found.');
}
return includePath;
}
if (COMMON_PROTO_FILES.indexOf(includePath) > -1) {
return path.join(googleProtoFilesDir, includePath);
}
return GoogleProtoFilesRoot._findIncludePath(originPath, includePath);
};