首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:无法读取卷取包[monorepo] [纱线工作区] [nodejs]中未定义的属性“组合”

TypeError:无法读取卷取包[monorepo] [纱线工作区] [nodejs]中未定义的属性“组合”
EN

Stack Overflow用户
提问于 2021-11-16 16:53:37
回答 1查看 700关注 0票数 0

我正试图在一个纱线单点内创建一个nodeJS应用程序包。

编译到JS的类型记录很好(通过tsc),然后汇总也完成。但是,在节点中运行已编译的包时,我将得到以下异常,指出无法找到外部模块:

代码语言:javascript
复制
/Users/benedikt/code/rollup-test/services/nodejs-service-1/dist/rollup/packages/service-utils/lib/logging.js:40
            format: winston_1.format.combine(winston_1.format.colorize(), winston_1.format.simple()),
                                     ^

TypeError: Cannot read property 'combine' of undefined

在我的rollup.config.js中,我把所有的node_modules包都是外部的,这样它们就不会被卷起转移。

配置在下面和这里有一个复制此问题的项目。

UPDATE我创建了另一个示例项目,它的范围更小,可以复制问题关于复本

rollup.config.js

代码语言:javascript
复制
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';

const isProduction = process.env.NODE_ENV === 'production';

const defaultExternal = (id) => {
  return (
    !id.startsWith('@vestico') &&
    !id.startsWith(`\0`) &&
    !id.startsWith(`~`) &&
    !id.startsWith(`.`) &&
    !id.startsWith(process.platform === `win32` ? process.cwd() : `/`)
  );
};

export default {
  input: './dist/server/index.js',
  output: {
    dir: './dist/rollup',
    format: 'cjs',
    preserveModules: true,
  },
  external: defaultExternal,
  plugins: [
    resolve({
      rootDir: '../../',
      transformMixedEsModules: true,
      extensions: ['.mjs', '.js', '.json', '.node', '.ts', '.jsx', '.tsx'],
    }),
    commonjs({ sourceMap: !isProduction }),
    json(),
  ],
};

Logging.ts

代码语言:javascript
复制
import { LoggingWinston } from '@google-cloud/logging-winston';
import { transports as wtransports, format, createLogger } from 'winston';

const isProduction = process.env.NODE_ENV === 'production' && process.env.COLD_START_TEST !== 'true';
const transports = isProduction
  ? [
      new LoggingWinston({
        resource: {
          type: 'cloud_run_revision',
          labels: {
            configuration_name: process.env.K_CONFIGURATION!,
            location: process.env.K_LOCATION!,
            revision_name: process.env.K_REVISION!,
            service_name: process.env.K_SERVICE!,
          },
        },
        serviceContext: {
          service: process.env.K_SERVICE!,
          version: process.env.K_REVISION!,
        },
      }),
    ]
  : [
      new wtransports.Console({
        level: 'debug',
        format: format.combine(format.colorize(), format.simple()),
      }),
    ];

export const logger = createLogger({
  level: 'debug',
  transports,
});

Logging.ts (由tsc +由汇总转换而成)

代码语言:javascript
复制
'use strict';

var logging = require('../../../_virtual/logging.js_commonjs-exports');
var require$$0 = require('@google-cloud/logging-winston');
var require$$1 = require('winston');

function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1);

(function (exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.initLogging = exports.logger = void 0;
/* eslint-disable prefer-spread */
const logging_winston_1 = require$$0__default["default"];
const winston_1 = require$$1__default["default"];
const isProduction = process.env.NODE_ENV === 'production' && process.env.COLD_START_TEST !== 'true';
const transports = isProduction
    ? [
        new logging_winston_1.LoggingWinston({
            resource: {
                type: 'cloud_run_revision',
                labels: {
                    configuration_name: process.env.K_CONFIGURATION,
                    location: process.env.K_LOCATION,
                    revision_name: process.env.K_REVISION,
                    service_name: process.env.K_SERVICE,
                },
            },
            serviceContext: {
                service: process.env.K_SERVICE,
                version: process.env.K_REVISION,
            },
        }),
    ]
    : [
        new winston_1.transports.Console({
            level: 'debug',
            format: winston_1.format.combine(winston_1.format.colorize(), winston_1.format.simple()),
        }),
    ];
exports.logger = winston_1.createLogger({
    level: 'debug',
    transports,
});

}(logging.__exports));

package.json

代码语言:javascript
复制
{
  "name": "@vestico/node-service-1",
  "description": "vestico node service 1",
  "author": "Benedikt",
  "license": "UNLICENSED",
  "private": true,
  "version": "1.0.1",
  "main": "server/index",
  "scripts": {
    "dev:run": "tsc --build ./tsconfig.json && nodemon --watch ./ --watch ../../packages src/server/index.ts",
    "dev": "PORT=3011 yarn run dev:run",
    "dev:prod": "PORT=3311 yarn run dev:run",
    "clean": "rm -rf ./dist",
    "compile": "NODE_ENV=production tsc --build ./tsconfig.json && rollup -c",
    "build:prod": "yarn run clean && yarn run compile",
    "start": "NODE_ENV=production COLD_START_TEST=true node -r require-so-slow dist/services/widget-api/src/server/index.js",
    "test": "yarn run clean && NODE_ENV=production tsc --build ./tsconfig.jest.json && jest --env=node test --watch",
    "dev:cold-start": "yarn build:prod && NODE_ENV=production COLD_START_TEST=true node dist/rollup/services/nodejs-service-1/dist/server/index.js"
  },
  "dependencies": {
    "@google-cloud/error-reporting": "^2.0.1",
    "@vestico/service-utils": "^1.0.0",
    "body-parser": "^1.19.0",
    "compression": "^1.7.4",
    "express": "^4.17.1",
    "gaxios": "^4.3.0",
    "lodash": "^4.17.21"
  },
  "devDependencies": {
    "@nighttrax/eslint-config-tsx": "^6.3.0",
    "@rollup/plugin-commonjs": "^21.0.1",
    "@rollup/plugin-json": "^4.1.0",
    "@rollup/plugin-node-resolve": "^13.0.6",
    "@rollup/plugin-typescript": "^8.3.0",
    "@types/compression": "^1.7.0",
    "@types/express": "^4.17.11",
    "@types/jest": "^26.0.23",
    "@types/lodash": "^4.14.169",
    "@types/lru-cache": "^5.1.0",
    "@types/node": "^14.14.12",
    "cors": "^2.8.5",
    "nodemon": "^2.0.7",
    "rollup": "^2.60.0",
    "ts-node": "^9.1.1",
    "typescript": "^4.2.4"
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-17 23:07:30

问题是tsconfig.json必须使用"module": "esnext"。否则,编译的代码不兼容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69993125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档