保持构建目录与docker容器一致,该容器在从typescript编译时忽略测试目录

时间:2016-06-10 19:00:49

标签: javascript docker typescript

我们有一个生活在using System; using System.Diagnostics; using System.IO; using System.IO.Pipes; using System.Runtime.InteropServices; using System.Threading; namespace RedirectDllOutput { class Program { [DllImport("..\\..\\..\\..\\x64\\Debug\\NativeDll.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void main(); [DllImport("Kernel32.dll", SetLastError = true)] static extern int SetStdHandle(int device, IntPtr handle); [DllImport("kernel32.dll", SetLastError = true)] static extern IntPtr GetStdHandle(int nStdHandle); private static int STD_OUTPUT_HANDLE = -11; static void Main(string[] args) { Do1(); Do1(); } private static void Do1() { int id = Process.GetCurrentProcess() .Id; using (var serverPipe = new NamedPipeServerStream("consoleRedirect" + id, PipeDirection.In, 1)) using (var clientPipe = new NamedPipeClientStream(".", "consoleRedirect" + id, PipeDirection.Out, PipeOptions.WriteThrough)) { ThreadPool.QueueUserWorkItem( state => { serverPipe.WaitForConnection(); using (var stm = new StreamReader(serverPipe)) { while (serverPipe.IsConnected) { try { var txt = stm.ReadLine(); if (!string.IsNullOrEmpty(txt)) { // Console.WriteLine(txt); } } catch (IOException) { break; } } } }, null); clientPipe.Connect(); var prevStdHandle = GetStdHandle(STD_OUTPUT_HANDLE); var newStdHandle = new HandleRef(clientPipe, clientPipe.SafePipeHandle.DangerousGetHandle()); var stdHandle = SetStdHandle(STD_OUTPUT_HANDLE, newStdHandle.Handle); main(); var handle = SetStdHandle(STD_OUTPUT_HANDLE, prevStdHandle); clientPipe.WaitForPipeDrain(); clientPipe.Close(); serverPipe.Close(); } } } } 的打字稿应用程序。我们有/src的测试版。在本地,当我们运行TSC时,它会编译两者并将它们分别存入/tests/dist/src

我们还有一个Dockerconfig,它告诉docker忽略一堆dev文件,包括/dist/test。当Docker运行/tests时,它只会看到tsc,因此会将所有/src存放到/src - 这意味着当我们拥有 - 例如 - / services时在本地编译为/dist的文件夹;我们在容器中的/dist/src/services/whatever.js处看到它。

我们的dockerfiles很小,它们只运行TSC并设置入口点。我们需要更清楚地使用dockerfiles吗?这是人们找到优雅解决方案的问题吗?

1 个答案:

答案 0 :(得分:0)

如果不确切地知道正在装载什么目录,以及docker容器中的位置,这很难说,但这听起来像是一个应该用tsconfig.json来解决的问题,可能有一些创造性的用途必要时使用docker文件。

例如,我有tsc的dockerfile,它看起来像这样:

FROM alpine:latest

RUN apk update && apk add nodejs && rm -rf /var/cache/apk/*
RUN npm install -g typescript@~1.6
RUN mkdir /tsc
WORKDIR /tsc

ENTRYPOINT ["tsc"]

此容器将按如下方式执行:

docker run tsc -v "./:/tsc"

如果我的目录树看起来像这样:

.
├── tsconfig.json
├── dist
├── src
├── test

然后我看到了tsconfig.json的几种不同的可能性:

{
  "compilerOptions": {
    "rootDir": "src",
    "outDir": "dist/src"
  }
}

OR

{
  "exclude": ["test"]
}