小编min*_*rse的帖子

ESLint:对angularjs应用程序使用建议的默认规则

我最近在我的角度应用程序中添加了ESLint-ing,并很快意识到我需要eslint-plugin-angular插件才能使我的应用程序正确地进行打印.

在此之前,我在我的.eslintrc文件中使用extends属性并设置为eslint:recommended使用eslint推荐的规则集.

{
  "extends": "eslint:recommended"
}
Run Code Online (Sandbox Code Playgroud)

我通过在我的代码中向对象定义添加一个尾随逗号来测试这个,以确保我看到eslint出现错误.

现在,按照eslint-plugin-angular的指南,我还安装了eslint-config-angular,我发现最快的入门方法是使用可共享配置.

如果我使用extends angular config选项代替我当前的:

{
  "extends": "angular"
}
Run Code Online (Sandbox Code Playgroud)

我不再为意外的尾随逗号抛出我的错误.

那么,有没有一种方法可以同时使用angular和eslint:recommendedextends config选项?例如:

{
  "extends": ["angular", "eslint:recommended"]
}
Run Code Online (Sandbox Code Playgroud)

(我知道不起作用)

如果没有,这是否意味着我必须在我.eslintrc的模板中创建一个规则配置对象来模仿eslint推荐的那些?

{
  "extends": "angular",
  "rules" : {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

angularjs eslint

8
推荐指数
1
解决办法
1万
查看次数

Karma配置文件 - 使用basePath

我只是在我的Karma配置文件中尝试了一些东西,并且有一个像这样的文件数组:

 files: [
  '../dist/app/**/*.mock.js',
  '../dist/assets/scripts/bower_libs.js',
  '../dist/assets/scripts/main.js',
  '../test/src/**/*.js',
  '../dist/app/**/*.spec.js'
],
Run Code Online (Sandbox Code Playgroud)

我知道我可以在这里使用一个basePath,例如配置中的basePath:'../dad /',这样就不需要在某些路径上加上'../dist/'.但是如果我的测试文件夹与dist位于同一级别,我将如何升级?

会是这种事吗?

basePath: '../dist/'

files: [
      'app/**/*.mock.js',
      'assets/scripts/bower_libs.js',
      'assets/scripts/main.js',
      '../test/src/**/*.js',
      'app/**/*.spec.js'
    ], 
Run Code Online (Sandbox Code Playgroud)

这可能是一个非常愚蠢的问题,但我只是想确定一下!

karma-runner gulp-karma

7
推荐指数
1
解决办法
5612
查看次数

Express:单独的路由和控制器文件

我试图在Express中将一些路由及其处理程序逻辑拆分为单独的文件.我已经看到了类似于JS的示例目录结构,其中使用了单独的路由和控制器文件,因此我试图实现这种方法但是遇到了问题.

我的服务器和路由配置如下:

server.js

var express = require('express'),
  app = express(),
  bodyParser = require('body-parser'),
  routes = require('./routes/index')

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
routes(app);
Run Code Online (Sandbox Code Playgroud)

/routes/index.js

module.exports = function(app) {
  var catalogues = require('../routes/catalogues');
  app.use('/catalogues-api', catalogues);
};
Run Code Online (Sandbox Code Playgroud)

/routes/catalogues.js

var catalogues = require('../controllers/catalogues');
module.exports = function(app) {

  app.route('/catalogues')
    .get(catalogues.apiGET)
    .post(catalogues.apiPOST);
};
Run Code Online (Sandbox Code Playgroud)

/controllers/catalogues.js

var request = require('request');

exports.apiGET = function(req, res) {
  var options = prepareCataloguesAPIHeaders(req);
  request(options, function(err, response, body){
    res.send(body);
  });
};

exports.apiPOST = function(req, res) {
  var options = prepareCataloguesAPIHeaders(req);
  options.json = true;
  options.body = …
Run Code Online (Sandbox Code Playgroud)

node.js express

7
推荐指数
1
解决办法
2万
查看次数

Node Express - 存储和检索身份验证令牌

我有一个Express应用程序设置,需要一些关于存储令牌的建议.

我在验证用户帐户后从OAuth 2服务器收到访问令牌,然后我需要将其用于后续的api请求.

我想隐藏来自客户端的令牌值,我相信这样做的一种方法是将令牌保存在服务器上的编码cookie中,以便在进一步请求时,可以通过中间件路由这些令牌,然后cookie就可以了用于检索令牌存储的服务器端,然后用作对实际api端点的持续请求中的头值.

实际上有人已经问过这个问题 - 如何在Angular应用程序中存储身份验证令牌这正是我在我的应用程序中使用的流程,但答案是关于使用Angular服务而我不太确定我想要这样做,肯定这一切都可以由Express处理,因此客户端代码不需要知道令牌,只需要知道API服务器返回的任何错误.

所以我想我需要的流程摘要:

  • 用户提交登录凭据
  • OAuth 2服务器返回访问令牌
  • 令牌被保存在Express的某个地方,由各种ID键入
  • 生成cookie并将其发回以响应客户端.Cookie包含可能编码的令牌值?或者也许存储在Express中间件组件中的令牌值的id?
  • 客户端发出api请求,Express路由器中间件选择.
  • 快速检查cookie的存在并解码令牌值,或以某种方式从存储机制服务器端检索.
  • 然后将令牌值用作表达式和最终api端点之间的标头

可能已经存在处理这种事情的中间件,我已经看过PassportJS,这似乎是我可能想要使用的东西,但我不太确定它处理我正在工作的服务器上的OAuth2令牌流反对(密码授予),而不是似乎更适合重定向登录OAuth流.

我肯定需要在Express中保存令牌值的地方,所以某种形式的存储(不在内存中,我不认为).

我是Express的新手,所以我会很感激有关如何处理此问题的任何建议或建议.

谢谢

node.js access-token oauth-2.0 express angularjs

7
推荐指数
1
解决办法
1493
查看次数

在node express中再次调用相同的请求

我使用Express将请求代理到受OAuth 2访问令牌保护的单独API服务器.当令牌过期时,服务器将返回一个401,我现在正在我的路由器中间件中处理,然后去刷新与客户端会话关联的访问令牌(我正在使用express-session).

这是我的代码:

router.js

app.use('/api', require('./routes.js'));

routes.js

var express = require('express'),
  router = express.Router(),
  routesController = require('./routes.controller.js');

router.route('/*')
  .get(routesController.fetch);
Run Code Online (Sandbox Code Playgroud)

routes.controller.js

module.exports.fetch = function(req, res, next) {
  var options = helpers.buildAPIRequestOptions(req);
  request(options, function(err, response, body){
    if(response.statusCode === 401) {
      authController.refreshToken(req, res, next);
    } else {
      res.status(response.statusCode).send(body);
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

authController

module.exports.refreshToken = function(req, res, next) {
  var formData = {
      grant_type: 'refresh_token',
      refresh_token: req.session.refreshToken,
      scope: 'PRODUCTION'
    },
    headers = {
      'Authorization' : 'Basic ' + consts.CLIENT_KEY_SECRET_BASE64_DEV
    };
  request.post({url:consts.ACCESS_TOKEN_REQUEST_URL_DEV, form:formData, …
Run Code Online (Sandbox Code Playgroud)

middleware node.js express node-request

7
推荐指数
1
解决办法
922
查看次数

在整个管道中分多个阶段解开藏匿处

我在我的管道中使用 stash\unstash,想知道你能在多个阶段 unstash 吗?

例如:

stage('One') {
  steps {
    echo 'Stage one...'
    stash includes: 'dist/**/*', name: 'builtSources'
    dir('/some-dir/deploy') {
      unstash 'builtSources'
    }
  }
}
stage('Two') {
  steps {
    echo 'Stage two...'
    node('OtherNode') {
      dir('/some-other-dir/deploy') {
        unstash 'builtSources'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

那么我可以在以下任何一个阶段中多次检索在早期阶段制作的藏品吗?

jenkins jenkins-plugins jenkins-pipeline

7
推荐指数
1
解决办法
4055
查看次数

在组件测试规范中模拟 BehaviourSubject

我正在尝试模拟组件测试中的服务依赖项,该服务具有我正在尝试模拟的行为主题属性。

我的服务如下:

export class DatePickerService {
  public date: moment.Moment;
  public selectedDate: BehaviorSubject<moment.Moment> = new BehaviorSubject<moment.Moment>(moment());

  public changeDate = (date: moment.Moment) => {
    this.selectedDate.next(date);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的组件中订阅 selectedDate:

ngOnInit() {
    this.datePickerService.selectedDate.subscribe((selectedDate) => {
        // do stuff here...
    }
}
Run Code Online (Sandbox Code Playgroud)

在测试我的组件时,我使用 TestBed 方法并为日期选择器服务提供我自己的模拟:

const mockDatePickerService = {
    selectedDate: jasmine.createSpy().and.returnValue(of(moment('01-01-2018', 'DD-MM-YYYY')))
};

beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [
            MyComponent
        ],
        providers: [
            HttpClient,
            HttpHandler,
            { provide: DatePickerService, useValue: mockDatePickerService }
        ],
        imports: [
            TranslateModule.forRoot(),
            RouterTestingModule
        ]
    })
    .compileComponents();
}));
Run Code Online (Sandbox Code Playgroud)

在尝试运行我的第一个测试时,我从

TypeError: undefined is …
Run Code Online (Sandbox Code Playgroud)

typescript angular angular6

7
推荐指数
1
解决办法
8613
查看次数

错误TS6200:以下标识符的定义与另一个文件(@ types / jasmine)中的标识符冲突

尝试构建我的项目时(使用Angular CLI),我收到以下错误

ERROR in ../my-app/node_modules/@types/jasmine/index.d.ts(18,1): error TS6200: Definitions of the following identifiers conflict with those in another file: Expected, SpyObjMethodNames, clock, CustomEqualityTester, CustomMatcherFactory, ExpectationFailed, SpecFunction, SpyObj, jasmine
Run Code Online (Sandbox Code Playgroud)

我正在使用VSCode,当我转到有问题的行时,我可以选择查看与它冲突的文件。

这会将我带到以下位置的文件:

/Users/<user_name>/Library/Caches/typescript/3.3/node_modules/@types/jasmine/ts3.1/index.d.ts

我有点不明白为什么TS编译器尝试使用此缓存的类型定义,这可能是怎么回事?

谢谢

jasmine typescript angular

7
推荐指数
2
解决办法
2342
查看次数

使用Angular CLI创建库时如何捆绑供应商字体

我正在使用Angular CLI(v7.x)创建一个组件库,并且无法弄清楚如何获得css规则包含在ng-packagr生成的dist文件夹中所需的第三方字体资产。

由于ng-packagr根据此问题不支持scss捆绑,因此我在后期构建任务中使用scss-bundle为我执行捆绑,并将最终捆绑的scss文件放入我的dist文件夹中。

但是,某些css规则(例如字体声明)包括对相对字体文件夹的url引用,而我还没有将其包含在dist文件夹中。

因此,例如,在我的角度库应用程序中,我有styles.scss文件,其中包含一个导入图标样式表的条目:

@import "~primeicons/primeicons.css";
Run Code Online (Sandbox Code Playgroud)

但是在我的node_modules文件夹中有一个相对的字体文件夹,这些质素位于这些文件夹中,用于CSS。

在此处输入图片说明

一种方法是,我可以写一个进一步的后期构建步骤,将它们捆绑在一起,并将它们放到dist文件夹中我串联的scss文件旁边的fonts文件夹中,以便可以解决它们。

我想知道是否有更聪明的方法,或者在构建库来执行此操作时是否使用ng-packager或angular-cli构建的方法?

更新资料

因此,我尝试了fonts在库项目根目录(实际上是在资产文件夹下)中拥有一个文件夹的方法,并在dist构建库后将其复制到文件夹的根目录中。

在我的运动场应用程序中,我尝试在实际的lib中使用打包的样式,我有以下内容:

my-lib-playground / src / styles.scss

@import "../../../dist/my-lib/styles";
Run Code Online (Sandbox Code Playgroud)

但是,当尝试使用CLI构建我的游乐场应用程序时,我得到:

ERROR in ./src/styles.scss (/Users/someone/Documents/Github/my-lib-playground/node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!/Users/someone/Documents/Github/my-lib-playground/node_modules/postcss-loader/src??embedded!/Users/someone/Documents/Github/my-lib-playground/node_modules/sass-loader/lib/loader.js??ref--14-3!./src/styles.scss)
Module Error (from /Users/someone/Documents/Github/my-lib-playground/node_modules/postcss-loader/src/index.js):
(Emitted value instead of an instance of Error) CssSyntaxError: /Users/someone/Documents/Github/my-lib-playground/dist/my-lib-playground/styles.scss:609:56: Can't resolve './fonts/open-sans-v15-latin-700.eot' in '/Users/someone/Documents/Github/my-lib-playground/projects/my-lib-playground/src'
Run Code Online (Sandbox Code Playgroud)

所以我的实际问题是:

在使用cli进行构建时,如何使正在使用的“游乐场”应用程序正确地包含\解析字体文件?相对于我当前的Playground应用,显然这些问题正在设法解决。什么是正确的解决方案?还是我做错了什么?

其它的办法

制作primeng一个peerDependency我的库,让开发人员负责添加primeng到他们的应用中,并angular.json根据以下丹尼尔建议的答案将相关样式包括在内。这是正确的方法,只有方法吗?

angular-cli primeng angular ng-packagr angular-cli-v7

7
推荐指数
1
解决办法
955
查看次数

如何在Typescript中导出类实例

我正在编写一个TS库,并想导出一个类的实例,所以我打算在消费应用程序中将其用作单例。

现在,我具有以下结构:

索引

export { Foo } from './my-class';
Run Code Online (Sandbox Code Playgroud)

foo.ts

export class Foo {
  functionA() {}
}
Run Code Online (Sandbox Code Playgroud)

然后,我使用webpack和babel将其构建为UMD格式,并且在另一个应用程序(Angular)中,我能够在我的类中导入,实例化并相应地使用它。

import { Foo } from 'foo';

private foo = new Foo();

const x = foo.functionA();
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以返回我的类的实例化实例,或者我是否正在以错误的方式考虑呢?

因此,不必这样做new Foo(),导入的Foo实际上已经是一个实例了吗?

谢谢

我应该提到的UPDATE,我正在导出接口之类的其他内容,因此我认为默认类导出不是正确的正确方法吗?-看这里

typescript umd angular

6
推荐指数
3
解决办法
4573
查看次数