我有一个带有webpack的反应应用程序。开发服务器按预期工作。当我在本地运行时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": {
"@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/
编辑我已经发现了索引.js所以也许条目不好或其他什么,但后来我在组件中遇到了一堆错误,它无法解析 jsx 标签。我怀疑babel-loader
没有在gitlab-ci上工作。
编辑29.3.2019我还没有找到解决方案。截至目前,您可以在github上拥有免费的私有存储库,将项目迁移到github并设置circleci。Circleci为我完美无瑕。
添加
"react": "^16.4.1",
"react-dom": "^16.4.1"
对你来说devDependencies
它应该可以工作。
出现错误是因为您没有在package.json
中提供react
和react-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
找不到react
和react-dom
的安装目录,因此传递安装命令将在构建时显式提供模块。
我刚刚在 Gitlab CI 上遇到了同样的问题,并发现排除是问题所在:
exclude: [/node_modules/, /build/]
尝试将其替换为以下内容:
exclude: '/node_modules/',
include: [
path.join(__dirname, 'src')
]
它现在在本地和 Gitlab CI 上为我工作。以前,它只能在本地工作。
还有另一个问题为我指明了正确的方向:Webpack 构建在 Gitlab-CI 中失败