javascript - gitlab 上的 CI/CD 无法使用 babel-loader 进行编译

标签 javascript reactjs webpack babeljs gitlab-ci

我有一个带有 webpack 的 React 应用程序。开发服务器按预期工作。当我在本地运行 webpack --mode production 时,它会按预期构建并创建一个 js 包。当我将它推送到 gitlab 时,它无法构建它并出现错误:

ERROR in ./src/index.js 20:16
Module parse failed: Unexpected token (20:16)
You may need an appropriate loader to handle this file type.
| firebase.initializeApp(config);
| 
> ReactDOM.render(<App />, document.getElementById('app'));
| 

这些是我的 devDependencies:

"devDependencies": {
  "@babel/core": "^7.2.2",
  "@babel/plugin-transform-flow-strip-types": "^7.2.3",
  "@babel/plugin-proposal-class-properties": "^7.2.3",
  "@babel/plugin-proposal-decorators": "^7.2.3",
  "@babel/plugin-proposal-object-rest-spread": "^7.2.0",
  "@babel/preset-env": "^7.2.3",
  "@babel/preset-react": "^7.0.0",
  "babel-eslint": "8.2.6",
  "babel-loader": "^8.0.4",
  "copy-webpack-plugin": "4.6.0",
  "css-loader": "0.28.11",
  "eslint": "4.19.1",
  "eslint-loader": "2.1.1",
  "eslint-plugin-react": "7.11.1",
  "html-webpack-plugin": "3.2.0",
  "style-loader": "0.21.0",
  "webpack": "^4.28.2",
  "webpack-cli": "^3.1.2",
  "webpack-dev-server": "^3.1.14"
}

这是我的 webpack 配置:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.join(__dirname, 'build'),
    filename: 'index.bundle.js'
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: [/node_modules/, /build/],
        use: ['babel-loader', 'eslint-loader']
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      }
    ]
  },
  devServer: {
    historyApiFallback: true
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './public/index.html',
      filename: 'index.html'
    }),
    new CopyWebpackPlugin([
      { from: path.join(__dirname, 'public/'), to: path.join(__dirname, 'build') }
    ])
  ]
};

这在以前是有效的,但我更新的库已经过时了。更新后 gitlab ci 失败。

这是构建配置:

image: node:latest

cache:
    paths:
        - node_modules/

stages:
    - setup
    - build

setup:
    stage: setup
    script:
        - echo "Setup started"
        - yarn install
    artifacts:
        paths:
            - node_modules/

build:
    stage: build
    script: 
        - yarn build
    artifacts:
        paths:
            - build/

编辑 我已经发现了 index.js,所以也许条目不好或什么的,但后来我在组件中遇到了一堆错误,它无法解析 jsx 标签。我怀疑 babel-loader 没有在 gitlab-ci 上工作。

编辑 29.3.2019 我还没有找到解决方案。因为你可以在 github 上有免费的私有(private) repo ,将项目迁移到 github 和 setup circleci . Circleci 完美地为我工作。

最佳答案

添加

"react": "^16.4.1",
"react-dom": "^16.4.1"

到你的devDependencies,它应该可以工作。

错误来了,因为你没有在package.json中提供reactreact-dom模块。

如果它对你有用,请告诉我,如果不对,我们会期待这个问题

更新:

image: node:latest

cache:
    paths:
        - node_modules/

stages:
    - setup
    - build

setup:
    stage: setup
    script:
        - echo "Setup started"
        - yarn install
    artifacts:
        paths:
            - node_modules/

build:
    stage: build
    script: 
        - yarn install react
        - yarn install react-dom
        - yarn build
    artifacts:
        paths:
            - build/

直接在脚本中添加安装命令应该可以解决这个问题。 不知何故,您的 webpack 找不到 reactreact-dom 的安装目录,因此传递安装命令将在构建时明确提供模块。

关于javascript - gitlab 上的 CI/CD 无法使用 babel-loader 进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53930900/

相关文章:

javascript - Coffeescript 翻译 - 嵌套 for 循环

javascript - 如何在 Chrome 开发工具中使用 jQuery 遍历执行上下文?

javascript - 从流中动态导入 Javascript 模块

linux - 在VPS上执行长时间的uglifyjs

reactjs - Webpack url-loader 或 file-loader 不工作 react 应用程序

javascript - 如何使用 d3.js 创建像 StackOverflow 信誉图这样的图表?

javascript - Raphael svg 反转 y 轴坐标

javascript - React Redux 中 Action 函数的用途是什么?它们都应该返回一个发送到存储/中间件的操作或函数吗?

javascript - 如何在 Redux 中更新组件状态

reactjs - renderToNodeStream [object Object] 服务器端渲染