#node.js #typescript #docker #webpack
#node.js #машинопись #docker #webpack
Вопрос:
У меня есть папка сервера (узла), расположенная в корне моего проекта, это приложение Gatsby, написанное на Typescript
Вот одна из ошибок:
#27 27.94 ERROR in ./server/modules/version/index.ts
#27 27.94 Module not found: Error: Can't resolve '../../common/api/cache' in '/build/server/modules/version'
#27 27.94 @ ./server/modules/version/index.ts 7:16-49
#27 27.94 @ ./server/index.ts
Модуль, на который он ссылается, это:
export class StatusCache {
private _cache: Record<string, CacheObject> = {};
private options: CacheOptions = {
expiresMinutes: 3
};
...
и импорт в другой файл import { StatusCache } from "../../common/api/cache";
структура папок интересующей области:
server
- common
- api
- cache (StatusCache class location)
- modules
- <version>
- index.ts
и, наконец, мой webpack.server.js
const path = require("path");
const CleanWebpackPlugin = require("clean-webpack-plugin");
const webpack = require("webpack");
const OUTPUT_FOLDER = "dist";
module.exports = env => ({
entry: "./server/index.ts",
mode: "production",
target: "node",
module: {
rules: [
{
test: /.(tsx|ts)?$/,
use: [
{
loader: "ts-loader",
options: {
logInfoToStdOut: true,
logLevel: "info",
allowTsInNodeModules: false,
transpileOnly: true
}
}
],
exclude: /node_modules/
}
]
},
plugins: [
new CleanWebpackPlugin(),
new webpack.IgnorePlugin(/.(test|spec)./)
],
externals: {
bufferutil: "bufferutil",
"utf-8-validate": "utf-8-validate",
"mongodb-client-encryption": "mongodb-client-encryption"
},
resolve: {
extensions: [".tsx", ".ts", ".js"]
},
output: {
filename: "server.js",
chunkFilename: "[name].bundle.js",
path: path.resolve(__dirname, OUTPUT_FOLDER),
publicPath: "/"
}
});
Комментарии:
1. Это файлы кэша. Вы пробовали запускать
gatsby clean
иgatsby develop
?2. Мой проект работает нормально локально — он завершается сбоем при сборке сервера в контейнере Docker, который создается с помощью этой команды :
webpack --config webpack.server.js
. Я не верю, что это обязательно проблема Gatsby3. Спасибо за пометку Docker — я не подумал добавить его, мой плохой!
Ответ №1:
Я нашел решение, которое сработало для меня и может быть полезным для других.
Я добавил и отредактировал свой tsconfig-server.json к этому:
{
"compilerOptions": {
"baseUrl": "./server",
"module": "commonjs",
"esModuleInterop": true,
"target": "esnext",
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist",
"noEmit": false
},
"lib": ["es2015"]
}
в частности, baseUrl, target и moduleResolution
Ответ №2:
У меня была аналогичная ошибка, проблема была в gatsby-config, мне пришлось добавить свойство ignore следующим образом :
{
resolve: `gatsby-source-filesystem`,
options: {
name: `data`,
path: `${__dirname}/src/data/`,
ignore: [`**/.*`], // ignore files starting with a dot
},
},