从Angular 2中的构建中排除文件

时间:2017-07-06 15:11:58

标签: angular angular-cli

如何使用angular-cli从角度构建中排除文件。我只是在<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-remote-driver</artifactId> <version>3.4.0</version> </dependency> tsconfig.json文件中添加要排除的路径,但是当我运行tsconfig.app.json时,angular仍在尝试编译文件。

有什么想法吗?

7 个答案:

答案 0 :(得分:7)

使用tsconfig.jsonexclude属性(在根级别),即:

{
   "exclude": [
       "node_modules",
       "**/*.spec.ts"
   ]
}

答案 1 :(得分:1)

您可以使用ng eject获取webpack.config.js。您可以根据需要进行修改。但是,之后您将无法使用ng serveng build

要再次使用这些命令,您必须修改.angular-cli.json。删除属性&#39; projects.ejected&#39;或将其设置为false。 How to undo Angular 2 Cli ng-eject

答案 2 :(得分:1)

在angular.json文件中,编辑构建部分,如下所示:

...
            "assets": [
              "src/assets",
              "src/favicon.ico"
            ],
            "styles": [
              "src/styles.scss"
            ],
            "scripts": []
          },
          "configurations": {
            "production": {
              "assets": [
                {
                  "glob": "**/*",
                  "input": "src/assets/",
                  "ignore": [
                    "**/test.json",
                    "**/test"
                  ],
                  "output": "/assets/"
                },
                {
                  "glob": "favicon.ico",
                  "input": "src/",
                  "output": "/"
                }
              ],
...

这仍然会执行默认的导入操作,但是在运行ng build --prod时删除指定的文件/目录(test.json和/ test),但是仍然可以通过ng serve使用它们,这对于本地用户来说非常有用开发。

请记住,如果您在.gitignore文件中包含敏感信息,也要将该文件排除。

在编辑tsconfig.json时我无法使其正常工作,但以上内容确实很吸引人!

基于找到的示例的解决方案here

答案 3 :(得分:1)

角度7

我将要从构建中排除的文件的正则表达式添加到src/tsconfig.app.json

示例:

假设我添加了文件./src/app/components/my-component/my-component.stub.ts来帮助进行单元测试。

npm run buildng serve --prod=true命令默认情况下仅排除以...spec.ts结尾的文件,并包括所有其他文件。

为了排除上述文件,请向src/tsconfig.app.json添加正则表达式,如下所示:

"exclude": [
    "**/*.stub.ts"
]

Angular将从构建命令中排除项目中任何以.stub.ts结尾的文件。

完整的src/tsconfig.app.json示例:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "module": "es2015",
    "types": []
  },
  "exclude": [
    "src/test.ts",
    "**/*.spec.ts",
    "**/*.stub.ts"
  ]
}

答案 4 :(得分:0)

我注意到,如果您将.放在该路径的前面,它将起作用:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    ...
  },
  "exclude": [
    ...
    "./yourPathToExclude/**/*"
  ]
}

答案 5 :(得分:0)

这是在某些情况下可能有效的另一种解决方案。

在angular.json(位于Angular项目的根目录中)中,默认情况下,您将在生产环境的构建配置中看到此文件替换块。

"fileReplacements": [
  {
    "replace": "src/environments/environment.ts",
    "with": "src/environments/environment.prod.ts"
  }
],

只需在其中添加您自己的文件替换,替换文件中的任何内容都不会编译到应用中。

"fileReplacements": [
  {
    "replace": "src/environments/environment.ts",
    "with": "src/environments/environment.prod.ts"
  },
  {
    "replace": "src/yourconfig.ts",
    "with": "src/yourconfig.prod.ts"
  }
],

替换的文件不再使用的导入也会被应用程序忽略,因此,使用上面的示例,如果被忽略的配置文件引用了许多其他特定于环境的文件,它们也将被忽略。

您还可以在许多环境中执行此操作:https://angular.io/guide/build

答案 6 :(得分:0)

我没有找到仅在生产模式下删除文件夹的方法。 使用tsconfig或使用angular.json构建配置

我发现这样做的唯一方法(不是“干净”)是在构建后删除该文件夹。

例如我的package.json:

    ...
    "build": "ng build",
    "build:dev": "npm run build -- -c dev",
    "build:prod": "npm run build -- -c production && npm run removeMocks",
    "removeMocks": "rimraf dist/myProject/mocks"
    ...

此Angular CLI线程已关闭,但未回答: https://github.com/angular/angular-cli/issues/6050#issuecomment-422288566