Angular-cli.json 、 webpack.conf 和 tsconfig.json 之间的区别

Difference between Angular-cli.json , webpack.conf & tsconfig.json

我正在构建一个 angular4/typescript 桌面应用程序并且在两者之间感到困惑

angular-cli.json
tsconfig.json
webpack.conf.js

  1. 谁能解释一下以上 3 个配置文件的主要概念差异及其用途?
  2. 我必须在我的项目中定义全部 3 个,还是只定义一个 就足够了。

    例如:路径ALIAS可以定义在所有3个里面 webpack/tsconfig/angular-cli。但是哪一个比其他的有好处呢?或者他们都一样,不管你用哪个。

  3. 所以一般来说,他们都可以提供项目配置,所以 一个是最佳性能并被推荐为最佳实践。

angular-cli.json

{
    "project": {
        "version": "1.0.0-beta",
        "name": "project"
    },
    "apps": [
        {
            "root": "src",
            "outDir": "dist",
            "assets": [
                "images",
                "favicon.ico"
            ],
            "index": "index.html",
            "main": "main.ts",
            "test": "test.ts",
            "tsconfig": "tsconfig.json",
            "prefix": "app",
            "mobile": false,
            "styles": [
                "styles.css"
            ],
            "scripts": [
                "../node_modules/core-js/client/shim.min.js",
                "../node_modules/mutationobserver-shim/dist/mutationobserver.min.js",
                "../node_modules/@webcomponents/custom-elements/custom-elements.min.js",
                "../node_modules/web-animations-js/web-animations.min.js"
            ],
            "environmentSource": "environments/environment.ts",
            "environments": {
                "dev": "environments/environment.ts",
                "prod": "environments/environment.prod.ts"
            }
        }
    ],
    "addons": [],
    "packages": [],
    "e2e": {
        "protractor": {
            "config": "./protractor.config.js"
        }
    },
    "test": {
        "karma": {
            "config": "./karma.conf.js"
        }
    },
    "defaults": {
        "styleExt": "scss",
        "prefixInterfaces": false,
        "inline": {
            "style": false,
            "template": false
        },
        "spec": {
            "class": false,
            "component": true,
            "directive": true,
            "module": false,
            "pipe": true,
            "service": true
        }
    }
}

tsconfig.json

{
    "compileOnSave": false,
    "compilerOptions": {
        "rootDir": "../",
        "baseUrl": "",
        "declaration": false,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "lib": [
            "es6",
            "dom"
        ],
        "mapRoot": "src",
        "module": "commonjs",
        "moduleResolution": "node",
        "outDir": "dist/out-tsc",
        "sourceMap": true,
        "target": "es5",
        "typeRoots": [
            "node_modules/@types"
        ],
        "types": [
          "jasmine",
          "core-js",
          "node"
        ]
    },
    "exclude": [
        "node_modules",
        "dist",
        "test.ts"
    ]
}

webpack.config.js

var webpack = require('webpack');
var path = require('path');
var webpackMerge = require('webpack-merge');
var HtmlWebpackPlugin = require('html-webpack-plugin');

// Webpack Config
var webpackConfig = {
  entry: {
    'main': './src/main.browser.ts',
  },

  output: {
    publicPath: '',
    path: path.resolve(__dirname, './dist'),
  },

  plugins: [
    new webpack.ContextReplacementPlugin(
      // The (\|\/) piece accounts for path separators in *nix and Windows
      /angular(\|\/)core(\|\/)@angular/,
      path.resolve(__dirname, '../src'),
      {
        // your Angular Async Route paths relative to this root directory
      }
    ),

    new HtmlWebpackPlugin({
      template: 'src/index.html'
    }),

  ],

  module: {
    loaders: [
      // .ts files for TypeScript
      {
        test: /\.ts$/,
        loaders: [
          'awesome-typescript-loader',
          'angular2-template-loader',
          'angular2-router-loader'
        ]
      },
      { test: /\.css$/, loaders: ['to-string-loader', 'css-loader'] },
      { test: /\.html$/, loader: 'raw-loader' }
    ]
  }

};

    var defaultConfig = {
      devtool: 'source-map',

      output: {
        filename: '[name].bundle.js',
        sourceMapFilename: '[name].map',
        chunkFilename: '[id].chunk.js'
      },

      resolve: {
        extensions: [ '.ts', '.js' ],
        modules: [ path.resolve(__dirname, 'node_modules') ]
      },

      devServer: {
        historyApiFallback: true,
        watchOptions: { aggregateTimeout: 300, poll: 1000 },
        headers: {
          "Access-Control-Allow-Origin": "*",
          "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
          "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
        }
      },

      node: {
        global: true,
        crypto: 'empty',
        __dirname: true,
        __filename: true,
        process: true,
        Buffer: false,
        clearImmediate: false,
        setImmediate: false
      }
    };


    module.exports = webpackMerge(defaultConfig, webpackConfig);

1) 因为 Angular4 最好与 typescript 一起使用,但您也可以使用 dart 和 ES5 javascript 来开发应用程序。现在

angular-cli.json

tsconfig.json

webpack.conf.js

angular-cli.json

Angular CLI 是一个命令行界面 (CLI),用于自动化您的开发工作流程。它允许您:

  • 创建一个新的 Angular 应用程序
  • 运行 一个支持 LiveReload 的开发服务器来预览你的 开发期间的应用
  • 向现有 Angular 应用程序添加功能
  • 构建您的应用程序以部署到生产环境

因此,从 cli 自动化 angular 应用程序需要 angular-cli.json 加载其配置。

TypeScript 是 Angular 应用程序开发的主要语言。它是 JavaScript 的超集,具有类型安全和工具的设计时支持。

浏览器无法直接执行 TypeScript。必须使用 tsc 编译器将 Typescript "transpiled" 转换为 JavaScript, tsconfig.json— TypeScript 编译器配置需要文件。

webpack.conf.js 它也是一个捆绑器,它提供与 angular cli 相同的配置功能,但在 webpack 中你必须这样做 在 angular cli 的情况下手动,您可以在不知道详细信息的情况下利用 Angular CLI 命令行帮助

2) 如果您通过 CLI

开发 angular 应用程序,则需要 angular-cli.jsontsconfig.json

如果使用自己的捆绑器,如 webpacksystemjs,在这种情况下,您可以拥有 tsconfig.json 和捆绑器配置文件 webpack.config.js

3)最佳实践最好使用ANGULAR CLI 你可以查看官方文档

Wasiq 的回答很棒,我想分享一些更综合的信息,这可能有助于我更好地理解 angularcli.jsonwebpack.config.json

无论技术栈如何,一个项目都需要一个打包器。

Webpack.conf.js - Bundler

Webpack 是非常受欢迎的捆绑器之一,因为它为 table 带来了一些特性。它扫描 import 语句并维护一个依赖树,允许它只捆绑你的代码实际使用的资源和 js 文件。但它需要 loadersplugins 配置,有时可能有点难以遵循。

angular-cli - Bundler but provides other useful features, ex: generating a pre scaffolded angular app or generating components/services

Angular 团队创建了 anguar-cli – 一个非常强大的打包工具,美妙之处在于它在幕后使用 Webpack,已经预先配置,所以您无需配置即可享受这些好处。所以你不会错过 webpack 的功能,但是 angular-cli 节省了很多精力。

您仍然可以访问项目配置文件,例如 karma.conf.js、protractor.conf.js、tslint.json、tsconfig.json 和 package.json。

轻松精确,

  1. angular-cli.json 是 angular cli generator for [ 的配置文件=48=] apps 内部默认使用webpack

  2. tsconfig.json是typescript编译器的配置文件

  3. webpack.config 是 js/css 的 webpack bundler 的配置文件。如果您更喜欢自己的开发工作流程,则需要此文件而不是 angular-cli.

注意:如果您对 angular 应用程序使用 angular-cli,tsconfig.json会自动生成。但是当我们更喜欢webpack bundler时,我们需要手动构建tsconfig.json