Я настраиваю среду разработки dockerized для узла / машинописи для проекта API.Цель состоит в том, чтобы запустить все в Docker и не иметь ни одного из установленных узлов, npm или модулей, установленных на хосте.Это необходимо для изоляции всех версий узла и всех модулей от других проектов.
. / Node
docker run \
-it \
-p "8080:80" \
--rm \
-w "/app" \
-v "$(pwd):/app" \
"node:10" "$@"
. / Npm
#!/bin/sh
./node npm $@
. / Npx
#!/bin/sh
./node npx $@
. / Package.json
{
"name": "testapi",
"version": "0.0.1",
"description": "a hello world api",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "npx ts-node src/app.ts",
"lint": "npx ts-lint --project src $@"
},
"author": "",
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^6.2.0",
"fastify": "^1.13.2",
"ts-node": "^7.0.1"
},
"devDependencies": {
"@types/node": "^10.12.15",
"ts-lint": "^4.5.1",
"typescript": "^3.2.2"
}
}
[править]
Я использую ./npm install
для создания моих узлов_модулей.Node_modules находится в общем томе, поэтому он сохраняется на хосте после удаления контейнера.Таким образом, мне не нужен Dockerfile для создания образа.
[/ edit]
Когда я запускаю команду lint, я получаю следующую ошибку:
testapi$ ./npx ts-lint -i
10: Pulling from node
Digest: sha256:5af431757f84bf7878ff72447eb993fc37afcd975874fff13278157bf83661e6
Status: Image is up to date for docker-remote.registry.kroger.com/node:10
npx: installed 32 in 2.883s
Cannot find module 'typescript'
Я думаю, что это связано с разрешением модуля, но я точно не знаю.Я вижу, что люди устанавливают машинописный текст глобально, но это означало бы, что мне нужно сделать Dockerfile вместо использования стандартного образа узла.Я не против использовать Dockerfile для dev, но я думаю, что должен быть способ сделать эту работу без этого.