首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何与Webpack jsHint两个不同的文件夹?

如何与Webpack jsHint两个不同的文件夹?
EN

Stack Overflow用户
提问于 2017-11-14 17:07:30
回答 1查看 392关注 0票数 1

简而言之,在构建过程中,我需要与包源并行地进行jshint测试规范。

使用Webpack 3,如何使jshint-loader监视两个不同的文件夹与两个不同的.jshintrc文件?.jshintrc的一个源代码包在./src文件夹中,该文件夹是捆绑到端分发的,另一个包与另一个.jshintrc./test文件夹中,在Webpack配置中没有提到这一点(Karma处理它)。

我尝试了以下两种方法,这两种方法都只处理./src,它们没有对./test做任何事情。Webpack配置的第一版:

代码语言:javascript
复制
entry: {
    'ui-scroll': path.resolve(__dirname, '../src/ui-scroll.js'),
    'ui-scroll-grid': path.resolve(__dirname, '../src/ui-scroll-grid.js')
},    
module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: { presets: ['es2015'] }
      },
      {
        enforce: 'pre',
        test: /\.js$/,
        include: path.resolve(__dirname, '../src'),
        use: [{ loader: 'jshint-loader' }]
      },
      {
        enforce: 'pre',
        test: /\.js$/,
        include: path.resolve(__dirname, '../test'),
        use: [{ loader: 'jshint-loader' }]
      }
    ]
},
// ...

Webpack配置的第二个版本在模块-规则部分不同:

代码语言:javascript
复制
module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: { presets: ['es2015'] }
      },
      {
        enforce: 'pre',
        test: /\.js$/,
        include: [
          path.resolve(__dirname, '../src'),
          path.resolve(__dirname, '../test')
        ],
        use: [{ loader: 'jshint-loader' }]
      }
    ]
},
// ...

但就像我说的,这不管用。可以从这个储存库获得完整的配置/源。那么,是否有可能修复我的方法,还是我需要尝试一些完全不同的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-18 21:04:53

经过一些研究,我们能够通过将这个问题分成两部分来解决这个问题:在产品构建期间的jshinting测试(只在磁盘上发布一次)和在开发过程中(监视模式,分布式在内存中)。

1.生产构建。--这很简单,因为jshit应该只执行一次。在将jshint作为依赖项添加到npm-包后-

代码语言:javascript
复制
npm install --save-dev jshint

它可以添加到构建脚本中-

代码语言:javascript
复制
"hint-tests": "jshint --verbose test",
"build": "npm run hint-tests && npm run prod-build && npm run prod-test"

prod-buildprod-test进程都不了解jshint

2. 解决方案是通过格罗布添加一个新的入口点

代码语言:javascript
复制
entry: {
  'ui-scroll': path.resolve(__dirname, '../src/ui-scroll.js'),
  'ui-scroll-grid': path.resolve(__dirname, '../src/ui-scroll-grid.js')
  'test': glob.sync(path.resolve(__dirname, 'test/*.js')) // development only!
}

应该只在开发环境中这样做,否则您将在分发文件夹中获得额外的包。因此,我们将它放在内存中;由于额外的捆绑,它对dev进程有一定的影响,但是由于这种情况仅发生在内存中,所以差别是很小的。然后使用jshint装载机,让我们向webpack配置的模块部分再添加一条规则:

代码语言:javascript
复制
module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /node_modules/,
      loader: 'babel-loader',
      options: { presets: ['es2015'] }
    },
    { // this is both for prod and dev environments
      enforce: 'pre',
      test: /\.js$/,
      include: path.resolve(__dirname, 'src'),
      use: [{ loader: 'jshint-loader' }]
    },
    { // this is only for dev environment
      enforce: 'pre',
      test: /\.js$/,
      include: path.resolve(__dirname, 'test'),
      use: [{ loader: 'jshint-loader' }]
    }
  ]
}

控制台输出中可能有太多日志,特别是在开发服务器工作期间,因此通过stats属性限制输出可能会有所帮助:

代码语言:javascript
复制
  stats: {
    modules: false,
    errors: true,
    warnings: true
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47291494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档