梁满根 發表於 2021-5-28 12:06:00

Angular 学习笔记 (Angular 12 get started)

<p>Angular 12 视乎比以往更稳定了.&nbsp;</p>
<p>这里记入一般的 get started 结构和做法.&nbsp;</p>
<p>&nbsp;</p>
<p><strong>第 1 步, 创建项目.</strong></p>
<div class="cnblogs_code">
<pre>ng new project --create-application=false</pre>
</div>
<p>默认会自动创建 app, 先关掉它.</p>
<p>&nbsp;</p>
<p><strong>第 2 步, 装 eslint 和 prettier&nbsp;</strong></p>
<p>早期 ng 是用 tslint 的, 后来废弃了, 现在改用 eslint&nbsp;</p>
<p>https://github.com/angular-eslint/angular-eslint&nbsp;这个是第三方的,但是做的很好一下.</p>
<div class="cnblogs_code">
<pre>ng add @angular-eslint/schematics
ng config cli.defaultCollection @angular-eslint/schematics</pre>
</div>
<p>然后就安装 Prettier - Code formatter vscode 插件</p>
<p>https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode</p>
<p>setup vs code setting&nbsp;</p>
<div class="cnblogs_code">
<pre>"editor.defaultFormatter": "esbenp.prettier-vscode",
"prettier.singleQuote": true,
"editor.formatOnSave": true,
"eslint.options": {
"extensions": [".ts", ".html"]
},
"eslint.validate": [
"javascript",
"typescript",
"html"
],
"editor.codeActionsOnSave": {
    "source.fixAll.tslint": true,
    "source.fixAll.eslint": true
},
"editor.detectIndentation": false,</pre>
</div>
<p>然后安装 prettier</p>
<div class="cnblogs_code">
<pre>yarn add prettier --dev</pre>
</div>
<p>要让 prettier 和 eslint 一起工作. 我们需要安装一些 prettier 的 plugin</p>
<div class="cnblogs_code">
<pre>yarn add eslint-plugin-prettier eslint-config-prettier --dev</pre>
</div>
<p>然后就创建 app</p>
<div class="cnblogs_code">
<pre>ng g app control-panel --routing --style=scss --prefix=cp</pre>
</div>
<p>每一个 app 或 lib 都会自带&nbsp;.eslintrc.json, 尽量不要使用全局的, best practice 是每一个 app 或 lib 独立管理 (虽然会有重复的设置啦, 但是不多啦)</p>
<p>由于我使用 eslint standard config 所以我要装</p>
<div class="cnblogs_code">
<pre>yarn add eslint-config-standard eslint-plugin-import eslint-plugin-node eslint-plugin-promise --dev</pre>
</div>
<p>这个是最终版本的 eslintrc.json, 所以我没有使用 root eslintrc.json 然后我使用了 eslint standard config, 然后我没有 e2e, 其它的都是安装官网配置的了.&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"root": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> "extends": "../../.eslintrc.json", // we don't have root file, so use root: true instead</span>
"ignorePatterns"<span style="color: rgba(0, 0, 0, 1)">: [
    </span>"!**/*"<span style="color: rgba(0, 0, 0, 1)">
],
</span>"overrides"<span style="color: rgba(0, 0, 0, 1)">: [{
      </span>"files"<span style="color: rgba(0, 0, 0, 1)">: [
      </span>"*.ts"<span style="color: rgba(0, 0, 0, 1)">
      ],
      </span>"extends"<span style="color: rgba(0, 0, 0, 1)">: [
      </span>"standard"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"plugin:@angular-eslint/recommended"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"plugin:@angular-eslint/template/process-inline-templates"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"plugin:prettier/recommended"<span style="color: rgba(0, 0, 0, 1)">
      ],
      </span>"plugins"<span style="color: rgba(0, 0, 0, 1)">: [
      </span>"@typescript-eslint"<span style="color: rgba(0, 0, 0, 1)">
      ],
      </span>"parserOptions"<span style="color: rgba(0, 0, 0, 1)">: {
      </span>"project"<span style="color: rgba(0, 0, 0, 1)">: [
          </span>"projects/control-panel/tsconfig.app.json"<span style="color: rgba(0, 0, 0, 1)">,
          </span>"projects/control-panel/tsconfig.spec.json"
          <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> "projects/control-panel/e2e/tsconfig.json" // we don't have e2e now</span>
<span style="color: rgba(0, 0, 0, 1)">      ],
      </span>"createDefaultProgram": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
      },
      </span>"rules"<span style="color: rgba(0, 0, 0, 1)">: {
      </span>"space-before-function-paren": "off"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"no-multiple-empty-lines": "off"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"no-new": "off"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"no-extend-native": "off"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"prettier/prettier": ["error"<span style="color: rgba(0, 0, 0, 1)">, {
          </span>"singleQuote": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
          </span>"endOfLine": "auto" <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> refer: https://stackoverflow.com/questions/53516594/why-do-i-keep-getting-delete-cr-prettier-prettier</span>
<span style="color: rgba(0, 0, 0, 1)">      }],
      </span>"@angular-eslint/directive-selector"<span style="color: rgba(0, 0, 0, 1)">: [
          </span>"error"<span style="color: rgba(0, 0, 0, 1)">,
          {
            </span>"type": "attribute"<span style="color: rgba(0, 0, 0, 1)">,
            </span>"prefix": "cp"<span style="color: rgba(0, 0, 0, 1)">,
            </span>"style": "camelCase"<span style="color: rgba(0, 0, 0, 1)">
          }
      ],
      </span>"@angular-eslint/component-selector"<span style="color: rgba(0, 0, 0, 1)">: [
          </span>"error"<span style="color: rgba(0, 0, 0, 1)">,
          {
            </span>"type": "element"<span style="color: rgba(0, 0, 0, 1)">,
            </span>"prefix": "cp"<span style="color: rgba(0, 0, 0, 1)">,
            </span>"style": "kebab-case"<span style="color: rgba(0, 0, 0, 1)">
          }
      ]
      }
    },
    {
      </span>"files"<span style="color: rgba(0, 0, 0, 1)">: [
      </span>"*.html"<span style="color: rgba(0, 0, 0, 1)">
      ],
      </span>"extends": ["plugin:@angular-eslint/template/recommended"<span style="color: rgba(0, 0, 0, 1)">],
      </span>"rules"<span style="color: rgba(0, 0, 0, 1)">: {}
    },
    {
      </span>"files": ["*.html"<span style="color: rgba(0, 0, 0, 1)">],
      </span>"excludedFiles": ["*inline-template-*.component.html"<span style="color: rgba(0, 0, 0, 1)">],
      </span>"extends": ["plugin:prettier/recommended"<span style="color: rgba(0, 0, 0, 1)">],
      </span>"rules"<span style="color: rgba(0, 0, 0, 1)">: {
      </span>"prettier/prettier": ["error"<span style="color: rgba(0, 0, 0, 1)">, {
          </span>"parser": "angular"<span style="color: rgba(0, 0, 0, 1)">
      }]
      }
    }
]
}</span></pre>
</div>
<p>&nbsp;</p>
<p><strong>第 3 步 安装 library</strong></p>
<div class="cnblogs_code">
<pre>ng g lib stooges --prefix=s</pre>
</div>
<p>通常一个 project 里面会有好几个 app, shared code 就可以做一个 library 来管理, 以后要发布也比较容易.</p>
<p>由于我没有要做成发布的版本,所以我需要修改一下 ts config</p>
<p><img src="https://img2020.cnblogs.com/blog/641294/202105/641294-20210528115944364-562695056.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>第 4 步 安装 tailwind css 和 stylelint</strong></p>
<p>tailwind 火, 无论如何都是要跟风一下的啦.</p>
<div class="cnblogs_code">
<pre>yarn add tailwindcss postcss autoprefixer stylelint stylelint-scss stylelint-config-recommended stylelint-prettier stylelint-config-prettier --dev</pre>
</div>
<p>tailwind.config.js</p>
<div class="cnblogs_code">
<pre>module.exports = {
purge: {
    enabled: true,
    content: ['./projects/*/src/**/*.html'],
},
darkMode: false, // or 'media' or 'class'
theme: {
    extend: {},
},
variants: {
    extend: {},
},
plugins: [],
};</pre>
</div>
<p>stylelint.config.js</p>
<div class="cnblogs_code">
<pre>module.exports = {
extends: ['stylelint-config-recommended', 'stylelint-prettier/recommended'],
plugins: ['stylelint-scss'],
rules: {
    'at-rule-no-unknown': null,
    'scss/at-rule-no-unknown': [
      true,
      {
      ignoreAtRules: [
          'tailwind',
          'apply',
          'variants',
          'responsive',
          'screen',
      ],
      },
    ],
    'declaration-block-trailing-semicolon': null,
    'no-descending-specificity': null,
    'prettier/prettier': [
      true,
      {
      endOfLine: 'auto', // refer: https://stackoverflow.com/questions/53516594/why-do-i-keep-getting-delete-cr-prettier-prettier
      },
    ],
},
};</pre>
</div>
<p>vs code setting&nbsp;</p>
<div class="cnblogs_code">
<pre>"css.validate": false,
"scss.validate": false,
"stylelint.enable": true,</pre>
</div>
<p>&nbsp;</p>
<p>到这里我们就有了一个 project 通常会用到的结构了.&nbsp;</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/keatkeat/p/14821676.html
頁: [1]
查看完整版本: Angular 学习笔记 (Angular 12 get started)