如何将Webpack与babel-loader和flow一起使用

雅各布·朗格

我正在努力进行设置,我觉得应该不太困难。我希望这三种技术可以协同工作:

  • webpack捆绑代码
  • babel,这样我就可以编写现代JavaScript
  • 流,因为类型检查就像测试和lint一样有帮助

我已经通过了几种设置,但是我在网上找到的所有文章似乎都没有帮助。


我在我的定义3个脚本package.jsonrunflowbuild使用typecheckingyarn run flow可以完美地工作,babel-node使用来执行脚本槽也是如此yarn run start

但是,当我执行yarn run build以下错误时,将出现在webpack中:

$ ./node_modules/webpack/bin/webpack.js
Hash: 207d42dac5784520fc99
Version: webpack 3.10.0
Time: 49ms
    Asset     Size  Chunks             Chunk Names
bundle.js  2.65 kB       0  [emitted]  main
   [0] ./src/main.js 181 bytes {0} [built] [failed] [1 error]

ERROR in ./src/main.js
Module parse failed: Unexpected token (3:5)
You may need an appropriate loader to handle this file type.
| // @flow
|
| type Foo = {
|   foo: string,
| };
error Command failed with exit code 2.

在我看来,类型注释不能在正确的位置正确删除。不幸的是,如果我直接在webpack中指定babel选项而不是在,也会发生这种情况.babelrc

当前,这.js在使用流时捆绑一堆文件flow中使我败北,而我发现了几个插件,据说这些插件仅使用预设就可以剥离流注释,这是flowtype.org似乎推荐的。


为了重现性,我的项目文件如下所示:

package.json

{
  …
  "dependencies": {},
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.0",
    "babel-eslint": "^8.0.3",
    "babel-loader": "^7.1.2",
    "babel-preset-env": "^1.6.1",
    "babel-preset-flow": "^6.23.0",
    "flow-bin": "^0.60.1",
    "webpack": "^3.9.1"
  },
  "scripts": {
    "build": "./node_modules/webpack/bin/webpack.js",
    "start": "./node_modules/babel-cli/bin/babel-node.js src/main.js",
    "flow": "./node_modules/flow-bin/cli.js"
  }
}

.flowconfig

[include]
./src

[ignore]

[libs]

[lints]

[options]

.babelrc

 {
   "presets": ["env", "flow"]
 }

webpack.config.js

const path = require('path');
const webpack = require('webpack');

module.exports = {
  entry: './src/main.js',
  output: {
    path: __dirname,
    filename: 'bundle.js',
  },
  resolve: {
    modules: [
      path.resolve('./src/'),
      'node_modules',
    ],
    extensions: ['.js'],
  },
  module: {
    rules: [
      {
        test: '/.js$/',
        loader: 'babel-loader',
      },
    ],
  },
};

src / main.js

// @flow

type Foo = {
  foo: string,
};

const defaultFoo: Foo = {
  foo: 'bar',
};

console.log(defaultFoo);
jclyons52

下载相关的预设并将其添加到webpack.config.js中,如下所示:

module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /(node_modules|bower_components)/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['es2015', 'stage-0', 'react']
        }
      }
    }
  ]
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将Webpack babel-loader和es6与worker-loader一起使用?

将babel-loader与webpack一起使用时如何指定cacheDirectory选项?

如何将babel与webpack一起使用以实现ie11兼容性

如何将Flow与async / await,promise和thenables一起使用?

如何将Webpack与Typescript一起使用?

如何将Webpack与Express一起使用?

将worker-loader与vue-cli和webpack一起使用

如何将RxJs 6与TypeScript和WebPack一起使用

如何将Jest与React和Webpack一起使用

将Webpack与babel和babel-preset-react和babel-preset-es2015一起使用

在React中将字符串类名称与CSS-loader和Webpack一起使用

如何将`GridSpec()`和`subplots()`一起使用

将html-loader与angularJS(v1)模板和Jest一起使用失败

将本地npm库与es6,babel和webpack一起使用

如何将webpack-dev-server与多个webpack配置一起使用?

代码拆分如何与导入/导出以及babel和webpack一起使用?

如何将Webpack多个条目与业力一起使用?

如何将socket.io与webpack-hot-middleware一起使用?

如何将webpack与静态图像文件一起使用?

如何将select2与webpack一起使用?

Webpack:如何将CommonsChunkPlugin与多个拆分包一起使用

将Flow类型与地图功能一起使用

将Pug与NodeJS和Webpack一起使用

如何使postcss-loader,postcss-cssnext和sass-loader在webpack中一起工作?

将Webpack与jade-loader一起使用,而无需明确要求资产

将Webpack worker-loader与Typescript一起使用导致找不到模块错误

如果将postcss-loader与适当的插件一起使用,是否需要css-loader?

如何使用CommonJS模块将Webpack和ES6与依赖项一起使用?

如何将Webpack和Gulp与多个入口点一起使用来转换应用程序和测试目录?