remove default env values. correct package json with env vars . #6

Merged
APervov merged 3 commits from edge5modbus into main 2026-06-19 08:18:08 +00:00
4 changed files with 22 additions and 5 deletions
Showing only changes of commit d00f79f4d3 - Show all commits

View File

@@ -7,7 +7,6 @@ COPY package.json package-lock.json ./
RUN npm ci RUN npm ci
COPY tsconfig.json ./ COPY tsconfig.json ./
COPY public ./public
COPY src ./src COPY src ./src
NBizyaev marked this conversation as resolved
Review

в проекте нет папки public

(обычно, такую или подобную папку (assets) создают в проекте тогда,
когда нужно использовать какие-то файлы, которые лежат прямо в проекте,
например, файлы маппингов можно было бы вынести в общую папку mappings
и копировать её в контейнер, чтобы быть уверенным, что когда приложению понадобится читать файл маппинга,
то он будет найдет в общей папке mappings. Рекомендую. )

в проекте нет папки public (обычно, такую или подобную папку (assets) создают в проекте тогда, когда нужно использовать какие-то файлы, которые лежат прямо в проекте, например, файлы маппингов можно было бы вынести в общую папку mappings и копировать её в контейнер, чтобы быть уверенным, что когда приложению понадобится читать файл маппинга, то он будет найдет в общей папке mappings. Рекомендую. )
RUN npm run build && npm prune --omit=dev RUN npm run build && npm prune --omit=dev

View File

@@ -3,9 +3,9 @@
"private": true, "private": true,
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "tsx watch src/index.ts", "dev": "tsx watch --env-file=.env src/index.ts",
NBizyaev marked this conversation as resolved Outdated

мы зациклились
"dev": "tsx watch --env-file=.env src/index.ts", - это корректная строчка
потому что это запуск проекта разработчиком
на его, разработчика, компьютере
и переменные окружения он, разработчик, положил в файл .env или .env.* и разумеется хочет чтобы при запуске проекта у него локально, эти переменные окружения из этого файла использовались в его, разработчика, коде.

мы зациклились "dev": "tsx watch --env-file=.env src/index.ts", - это корректная строчка потому что это запуск проекта разработчиком на его, разработчика, компьютере и переменные окружения он, разработчик, положил в файл .env или .env.* и разумеется хочет чтобы при запуске проекта у него локально, эти переменные окружения из этого файла использовались в его, разработчика, коде.
"build": "tsc", "build": "tsc",
"start": "node dist/index.js" "start": "node --env-file=.env dist/index.js"
NBizyaev marked this conversation as resolved Outdated

мы зациклились
"node --env-file=.env dist/index.js" - это корректная строчка
потому что это запуск билда разработчиком
на его, разработчика, компьютере
и переменные окружения он, разработчик, положил в файл .env или .env.* и разумеется хочет чтобы при запуске билда у него локально, эти переменные окружения из этого файла использовались в его, разработчика, коде.

Для запуска билда в продакшне мы будем использовать
CMD ["node", "dist/index.js"]
без указания конкретного .env
так как там в продакшн окружении будут указаны свои собственные значения переменных продакшн окружения.

мы зациклились "node --env-file=.env dist/index.js" - это корректная строчка потому что это запуск билда разработчиком на его, разработчика, компьютере и переменные окружения он, разработчик, положил в файл .env или .env.* и разумеется хочет чтобы при запуске билда у него локально, эти переменные окружения из этого файла использовались в его, разработчика, коде. Для запуска билда в продакшне мы будем использовать CMD ["node", "dist/index.js"] без указания конкретного .env так как там в продакшн окружении будут указаны свои собственные значения переменных продакшн окружения.
}, },
"dependencies": { "dependencies": {
"mqtt": "^5.15.1", "mqtt": "^5.15.1",

View File

@@ -4,12 +4,21 @@ import type { TopicHandler } from '../types.js'
export const TOPIC = 'data/edge5/modbus/v2' export const TOPIC = 'data/edge5/modbus/v2'
const REGISTER_COUNT = 125
const mapper = createMetricMapper({ const mapper = createMetricMapper({
filePath: process.env.EDGE5_MODBUS_V2_MAPPING_FILE as string, filePath: process.env.EDGE5_MODBUS_V2_MAPPING_FILE as string,
}) })
function parseValues(payload: Buffer): number[] { function parseValues(payload: Buffer): number[] {
return JSON.parse(payload.toString('utf8')) as number[] const values = JSON.parse(payload.toString('utf8')) as number[]
assertRegisterCount(values)
return values
}
function assertRegisterCount(values: number[]): void {
if (values.length !== REGISTER_COUNT) {
throw new Error(`Expected ${REGISTER_COUNT} modbus values, got ${values.length}`)
}
} }
async function postMetrics(metrics: MappedMetric[]): Promise<void> { async function postMetrics(metrics: MappedMetric[]): Promise<void> {

View File

@@ -4,6 +4,7 @@ import type { TopicHandler } from '../types.js'
export const TOPIC = 'data/edge5/modbus/v1' export const TOPIC = 'data/edge5/modbus/v1'
const EDGE = 'edge5' const EDGE = 'edge5'
const REGISTER_COUNT = 125
type Edge5ModbusMetric = { type Edge5ModbusMetric = {
edge: string edge: string
@@ -13,7 +14,15 @@ type Edge5ModbusMetric = {
} }
function parseValues(payload: Buffer): number[] { function parseValues(payload: Buffer): number[] {
return JSON.parse(payload.toString('utf8')) as number[] const values = JSON.parse(payload.toString('utf8')) as number[]
assertRegisterCount(values)
return values
}
function assertRegisterCount(values: number[]): void {
if (values.length !== REGISTER_COUNT) {
throw new Error(`Expected ${REGISTER_COUNT} modbus values, got ${values.length}`)
}
} }
function toMetrics(values: number[], timestamp: number): Edge5ModbusMetric[] { function toMetrics(values: number[], timestamp: number): Edge5ModbusMetric[] {