【问题标题】:Integrate materialize in a Angular2 project with webpack and SCSS使用 webpack 和 SCSS 在 Angular2 项目中集成物化
【发布时间】:2017-11-18 22:54:09
【问题描述】:

正如标题中所述,我正在尝试将 Materialize 集成到我的 Angular 2 项目中。

项目是使用“AngularCli”生成的

我使用“Webpack”和“Scss

我发现的教程都是不同的,我不明白如何为 scss 使用:

- Materialize website tuto

- Npm website

我的 angular-cli json:

{ "$schema": "./node_modules/@angular/cli/lib/config/schema.json", “项目”: { “名称”:“事故链网络角度”, “弹出”:真 }, “应用”: [ { “根”:“src”, "outDir": "dist", “资产”:[ “资产”, “favicon.ico” ], “索引”:“索引.html”, “main”:“main.ts”, “polyfills”:“polyfills.ts”, “测试”:“测试.ts”, "tsconfig": "tsconfig.app.json", "testTsconfig": "tsconfig.spec.json", “前缀”:“应用程序”, “风格”:[ “资产/scss/main.scss” ], “脚本”:[], "environmentSource": "environments/environment.ts", “环境”:{ “开发”:“环境/环境.ts”, "preprod": "环境/environment.preprod.ts", “产品”:“环境/environment.prod.ts” } } ], “e2e”:{ “量角器”:{ “配置”:“./protractor.conf.js” } }, “棉绒”:[ { “项目”:“src/tsconfig.app.json” }, { “项目”:“src/tsconfig.spec.json” }, { “项目”:“e2e/tsconfig.e2e.json” } ], “测试”: { “业力”:{ “配置”:“./karma.conf.js” } }, “默认值”:{ "styleExt": "scss", “零件”: { } } }

我的项目在资产中添加了物化文件:

【问题讨论】:

    标签: angular webpack sass angular-cli materialize


    【解决方案1】:

    有很多方法可以使用 MaterializeCSS 框架。

    安装前需要注意的几件事

    • 它不是一个纯 CSS 的框架,虽然它有 CSS 名称。我们也可以使用它的 SCSS
    • 它不是为 Angular 构建的
    • 它也是一个基于jquery的组件框架。虽然我们不应该在 Angular 中使用 jquery(不建议),但我们仍然导入。

    您可以使用任何以下方法:

    • CDN
    • 资产
    • 包含在 Angular (NPM) 中

    每个都有自己的优点和缺点。

    CDN

    只需将此添加到index.html 即可。

     <!-- Compiled and minified CSS -->
      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.2/css/materialize.min.css">
    
     <!-- We need jquery first -->  
      <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    
     <!-- Compiled and minified JavaScript -->
       <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.2/js/materialize.min.js"></script>
    

    资产

    将其作为资产添加到您的项目中。这有助于在本地构建和运行时不依赖互联网。

    Download jQuery

    Download CSS version

    • 提取它们
    • materialize.min.cssjquery-3.2.1.min.jsmaterialize.min.js 复制到您的资产文件夹中
    • 将它们添加到 index.html

      <link rel="stylesheet" href="./assets/materialize.min.css" >
      <script src="./assets/jquery-3.2.1.min.js"></script>
      <script src="./assets/materialize.min.js"></script>
      

    包含在角度(NPM)中

    在这种方法中,我们直接将文件包含到我们的角度构建中。为简单起见,我假设 angular 项目是使用 @angular/cli 构建的。

    npm install materialize-css --save 
    npm install jquery --save
    npm install url-loader --save
    

    将以下内容添加到.angular-cli.json

    "styles": [
       "styles.scss"
    ]
    
    "scripts":[
      "../node_modules/jquery/dist/jquery.js",
      "../node_modules/materialize-css/dist/js/materialize.js"
    ]
    

    styles.scss 内,添加:

    $roboto-font-path: "~materialize-css/dist/fonts/roboto/";
    @import "~materialize-css/sass/materialize";
    

    与 Angular 的集成:

    以上所有安装方法都提供了物化的完整功能,无需进一步安装任何东西即可在 Angular 中工作。 举个例子,只需在角度组件的 HTML 部分中使用适当的 HTML 结构,就可以了。

    在某些情况下,您可能需要修改 javascript,为此我们需要使用 jQuery。取而代之的是,我们可以在angular2-materialize 使用角度包装器开发人员。我使用 angular 和 materialize 开发了一个功能齐全的网站,但从未觉得有必要。

    如果你仍然相信你需要它。您可以按如下方式安装:

    • 使用上述任何一种方式安装物化
    • 安装 angular2-materialize

      npm install angular2-materilize --save 
      

      添加角度app.module.ts

      import { MaterializeModule } from "angular2-materialize";
      
      @NgModule({
        imports: [
          //...
          MaterializeModule,
        ],
        //...
      })
      

    关注angular2-materialize主页提供的其他示例

    【讨论】:

    • 我在这方面工作过,但这并不是那么简单。我的项目使用 cli 和 webpack。假设我从materializecss.com/getting-started.html 下载了materialize 的SASS 版本,因为我希望能够修改scss 行为。然后我将它复制/粘贴到我的资产文件夹中。但我不想在本地使用 jquery。对于动画,我需要 angular2-materialize。这一切都让我感到困惑,我尝试的每件事都会给我带来不同的错误,webpack/jquery/或物化相关......
    • 老兄,在哪里提到将 scss 文件放入资产中。告诉你尝试了什么以及你遇到了什么错误。您使用的是 cli pure 还是 cli 弹出? .我给了很多选择,你尝试了哪一个
    • 即使你不需要 jquery,materialize 也需要它,所以你必须导入它。如果您不想这样做,请使用 Material design lite 或 angular material 2 或最好的“MDC for Web”
    • 那我应该把我提供的链接中的materialize-SASS版本的文件放在哪里(其中包含sass/js/fonts文件)?这就是我需要的。所以我想它与您答案的资产部分相对应。我观看的每个 tuto 都会给出不同的答案.. 不清楚要添加到我的 webpack 配置/要添加到 main.html 中的内容,以及必须添加到 angula-cli 中的内容。来自 angular2materialize github 的教程告诉您执行您在此处为集成提供的每种方法中的一些方法:/ 对于信息,我没有弹出项目。而对于 Jquery,我只是不想在本地使用它。
    • 因为有很多方法可以做到。选择上述三个步骤中的任何一个,它应该可以工作。忽略angular2-materialize 让它在没有它的情况下工作。一旦我们看到一切正常,我们就可以安装它(即使它实际上根本不需要)
    【解决方案2】:

    如果您使用的是 Angular CLI(我假设您的意思是说它使用 Webpack 和 SCSS),为什么不将您的 scss 目录移出 src/assets/ 目录并将其放入src/ 文件夹,所以您的位置是 src/scss/。资产通常是您的应用程序的非编译/处理资源,而不是您的 SCSS 的适当位置。

    那你就可以改了

       "styles": [
            "assets/scss/main.scss"
       ],
    

       "styles": [
            "scss/main.scss"
       ],
    

    当您运行 cli(ng serveng build 时,您的 SCSS 应该被构建并随您的应用一起提供。

    我假设您正在导入main.scssscss/ 目录中的其他SCSS 文件。否则,您可以将它们添加到angular-cli.json 中的styles 数组中

    【讨论】:

    • PS 你也可以通过将"../node_modules/materialize-css/sass/materialize.scss" 传递到样式数组中,直接通过cli json 导入具体化scss。
    • 那么同时将scss文件导入main.scss和materialize.scss导入样式数组是没用的?
    • 您是在问将这两个都导入styles 数组是否毫无意义?如果 materialize.scss 已经导入到 main.scss 中,那么您不需要在样式数组中再次导入它。(但不确定我是否理解您)。
    • 是的,这就是我要问的。我对网络开发完全陌生,所以看起来我在问愚蠢的问题 x)
    • 好的,那么你的评估是正确的,如果materialize 已经被导入main,那么将main.scssmaterialize.scss 都导入你的styles 数组是没有用的。另外,我的建议有效吗?
    猜你喜欢
    • 2017-04-30
    • 2017-01-01
    • 1970-01-01
    • 2020-02-07
    • 2017-05-25
    • 2018-02-15
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    相关资源
    最近更新 更多