【问题标题】:Angular-cli Webpack 3rd part css filesAngular-cli Webpack 第 3 部分 css 文件
【发布时间】:2016-08-18 11:44:59
【问题描述】:

我刚搬到angular-cli 1.0.0-beta.11-webpack.2
有很多烦人的事情,但我面临的最大问题是外部 css 文件(可能我也会遇到 js 文件的问题)。

在我的项目中使用了Angular2 material,而menu component 需要overlay.css。当我将它包含在index.html 中时:

<link href="vendor/@angular2-material/core/overlay/overlay.css" rel="stylesheet">

ng serveng build 之后,dist 文件夹中的覆盖css 文件丢失。

angular-cli github 上有 issue。我完全按照提到的方式做了所有事情,但仍然无法正常工作。

我在

中创建了一个 assets 文件夹和 styles.css 文件
  • 源代码
  • src/app

我的angular-cli.json 文件看起来像:

{
  "project": {
    "version": "1.0.0-beta.11-webpack.2",
    "name": "cli-webstorm"
  },
  "apps": [
    {
      "root":"src",
      "assets":"assets",
      "main": "src/main.ts",
      "tsconfig": "src/tsconfig.json",
      "mobile": false,
      "styles": "styles.css",
      "environments": {
        "source": "environments/environment.ts",
        "prod": "environments/environment.prod.ts",
        "dev": "environments/environment.dev.ts"
      }
    }
  ],
  "addons": [],
  "packages": [],
  "e2e": {
    "protractor": {
      "config": "config/protractor.conf.js"
    }
  },
  "test": {
    "karma": {
      "config": "config/karma.conf.js"
    }
  },
  "defaults": {
    "prefix": "app",
    "sourceDir": "src",
    "styleExt": "css",
    "prefixInterfaces": false,
    "lazyRoutePrefix": "+"
  }
}

我想问一下如何在我的项目中包含一个库 css 文件(第 3 部分 css),以便我可以利用 angular-cli webpack 的好处?

【问题讨论】:

    标签: angular webpack angular-cli angular2-material


    【解决方案1】:

    您的答案在于angular-cli.json 中提供的新stylesscripts 配置设置。解决css注入有两种选择:

    外部样式

    选项 1

    只需将 css 文件的路径直接包含在 styles 数组中,如下所示:

    //-- angular-cli.json --//

    {
       //... 
     “apps”: [
       {
       //... 
       “styles”: [
         “styles.css”,
         “../node_modules/@angular2-material/core/overlay/overlay.css”
       ],
       “scripts”: [],
    
         // ...
        }
       }
     ], 
    

    选项 2

    您可以将overlay.css导入cli生成的src/styles.css文件中:

    /* scr/styles.css */
    
    @import "../node_modules/@angular2-material/core/overlay/overlay.css";
    

    如果您使用选项 2,请确保删除选项 1 中所示的对 overlay.css 的引用。

    注意:angular-cli.json 是一个配置文件,因此您需要在对其进行更改时重新启动服务器。

    你可以找到更多angular-cli 1.0.0-beta.11-webpack.2details here

    外部脚本

    与注入外部样式类似,您可以通过使用 angular-cli.json 中的scripts:[] 数组来注入外部脚本。此处添加的任何脚本都将加载到 window 对象。这对于需要从 window 对象访问 jQuery 的插件特别方便。更多关于这个here

    "scripts": [
      "../node_modules/jquery/dist/jquery.js"
    ],
    

    【讨论】:

    • 包括整个文件夹怎么样?使用 angular-cli 可以做到这一点吗?
    【解决方案2】:

    如果您升级到1.0.0-beta.11-webpack.3 或更高版本,您可以使用angular-cli.jsonapps[0].styles 属性列出要导入的外部样式表。

    要从1.0.0-beta.11-webpack.2 升级,请运行:

    npm uninstall -g angular-cli
    npm cache clean
    npm install -g angular-cli@1.0.0-beta.11-webpack.3
    

    注意:如果在运行 ng version 时遇到 SyntaxError: Unexpected token ... 错误,您可能需要 Node.js 6 才能使 angular-cli@1.0.0-beta.11-webpack.3 正常工作。详情请见https://github.com/angular/angular-cli/issues/1883

    如果您生成一个新项目,您的 angular-cli.json 应该如下所示(注意 styles 属性):

    {
      "project": {
        "version": "1.0.0-beta.11-webpack.3",
        "name": "demo"
      },
      "apps": [
        {
          "root": "src",
          "outDir": "dist",
          "assets": "assets",
          "index": "index.html",
          "main": "main.ts",
          "test": "test.ts",
          "tsconfig": "tsconfig.json",
          "prefix": "app",
          "mobile": false,
          "styles": [
            "styles.css"
          ],
          "scripts": [],
          "environments": {
            "source": "environments/environment.ts",
            "prod": "environments/environment.prod.ts",
            "dev": "environments/environment.dev.ts"
          }
        }
      ],
      "addons": [],
      "packages": [],
      "e2e": {
        "protractor": {
          "config": "./protractor.conf.js"
        }
      },
      "test": {
        "karma": {
          "config": "./karma.conf.js"
        }
      },
      "defaults": {
        "styleExt": "css",
        "prefixInterfaces": false,
        "lazyRoutePrefix": "+"
      }
    }
    

    【讨论】:

      【解决方案3】:

      Angular CLI Wiki Stories 页面有一个 "Thirdparty Installation" 部分:

      ng new my-todo-app
      ng install sass
      

      另外,请参阅自述文件的 Global Library Installation 部分:

      npm install bootstrap@next

      然后将需要的脚本文件添加到angular-cli.jsonapps[0].scripts

      "scripts": [
        "../node_modules/jquery/dist/jquery.js",
        "../node_modules/tether/dist/js/tether.js",
        "../node_modules/bootstrap/dist/js/bootstrap.js"
      ],
      

      最后将 Bootstrap CSS 添加到 apps[0].styles 数组中:

      "styles": [
        "../node_modules/bootstrap/dist/css/bootstrap.css",
        "styles.css"
      ],
      

      如果您正在运行它,请重新启动 ng serve,Bootstrap 4 应该可以在您的应用上运行。

      【讨论】:

        【解决方案4】:

        我认为您不需要将您的 css 文件包含在 index.html 中,而是包含在您的 ts 文件中。您可以像这样简单地对您的 css 文件进行导入

        import "yourcssfile.css"
        

        如果您只想在组件中使用它们,那么您可以使用styleUrl

         styleUrls: ['yourfile.css']
        

        angular2 webpack seed with angular2material

        【讨论】:

        • 我没有使用angular2 webpack。请检查angular-cli 据我所知,它将在angular-clilink 的下一个版本中提供
        • 即使你不使用 angular2 webpack 而是使用 angular-cli,你应该能够在你的主文件中对 css 进行导入,这将在你的整个项目中可用。这与它在具有 css 全局的问题中所说的相同。
        • 谢谢@MrJSingh。这不是我一直在寻找的结果,但通过一些改变我让它工作。 Angular2 材质正在创建一个
          ,它在关闭 body 标记之前被推送。这意味着我们必须禁用组件encapsulation: ViewEncapsulation.None 的封装。希望下个版本的angular-cli能解决这个问题
        • 我想我的种子里有这个。我也会更新我的答案。如果对其他人有帮助,请采纳答案?
        【解决方案5】:

        终于对我有用了

        angular-cli@1.0.0-beta.14

        webpack@2.1.0-beta.22

        ...都使用

        在本地安装

        npm install --save-dev

        正确版本的组合是使其发挥作用的关键。

        【讨论】:

          【解决方案6】:

          当我想从primefaces 导入 PrimeNG 时遇到了同样的问题,但我在我的文件夹中找到了一个 styles.scss...

          @import './../your_file_path/your_file_name';
          

          应该做的伎俩

          【讨论】:

            猜你喜欢
            相关资源
            最近更新 更多
            热门标签