Reputation: 2159
I made a react-app which I ejected. In my component file Grid.jsx
there is :
import "./grid.scss";
.
However, when I build with npm run build:dev
, I have an error : ERROR in ./src/App/components/wall/grid/Grid.jsx
Module not found: Error: Can't resolve './grid.scss'
.
I don't undestand because both files are in the same folder. Also, what is strange is that if I do my script npm run build:dev
locally on my mac, everything works.
Can somebody help me find the error please? Thank you
Here is the full error :
+ npm run build:dev
[13:39:06] Starting 'build'...
[13:39:06] Starting 'clean'...
[13:39:06] Finished 'clean' after 12 ms
[13:39:06] Starting 'copy'...
[13:39:06] Finished 'copy' after 22 ms
[13:39:06] Starting 'bundle'...
(node:176) DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead
Version: webpack 4.29.0
Time: 3609ms
Asset Size Chunks Chunk Names
main.5f3b72bf84d173109fc1.js 1.96 MiB main [emitted] main
main.5f3b72bf84d173109fc1.js.map 1.9 MiB main [emitted] main
vendors.5f3b72bf84d173109fc1.js 278 KiB vendors [emitted] vendors
vendors.5f3b72bf84d173109fc1.js.map 289 KiB vendors [emitted] vendors
ERROR in ./src/App/components/wall/grid/Grid.jsx
Module not found: Error: Can't resolve './grid.scss' in '/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid'
resolve './grid.scss' in '/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid'
using description file: /opt/atlassian/pipelines/agent/build/package.json (relative path: ./src/App/components/wall/grid)
Field 'browser' doesn't contain a valid alias configuration
using description file: /opt/atlassian/pipelines/agent/build/package.json (relative path: ./src/App/components/wall/grid/grid.scss)
no extension
Field 'browser' doesn't contain a valid alias configuration
/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss doesn't exist
.web.js
Field 'browser' doesn't contain a valid alias configuration
/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.web.js doesn't exist
.mjs
Field 'browser' doesn't contain a valid alias configuration
/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.mjs doesn't exist
.js
Field 'browser' doesn't contain a valid alias configuration
/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.js doesn't exist
.json
Field 'browser' doesn't contain a valid alias configuration
/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.json doesn't exist
.web.jsx
Field 'browser' doesn't contain a valid alias configuration
/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.web.jsx doesn't exist
.jsx
Field 'browser' doesn't contain a valid alias configuration
/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.jsx doesn't exist
.scss
Field 'browser' doesn't contain a valid alias configuration
/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.scss doesn't exist
as directory
/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss doesn't exist
[/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss]
[/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.web.js]
[/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.mjs]
[/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.js]
[/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.json]
[/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.web.jsx]
[/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.jsx]
[/opt/atlassian/pipelines/agent/build/src/App/components/wall/grid/grid.scss.scss]
@ ./src/App/components/wall/grid/Grid.jsx 45:0-22
@ ./src/App/components/wall/Wall.js
@ ./src/App/App.js
@ ./src/index.js
Here is my steps of the pipeline :
pipelines:
branches:
develop:
- step:
name: Build Dev
caches:
- node
script: # Modify the commands below to build your repository.
- node -v
- npm set progress=false && npm install
- npm test
- npm run build:dev
artifacts:
- build/**
And here is my webpack config:
const webpack = require('webpack');
const path = require('path');
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
// import React from 'react';
// import ReactDOM from 'react-dom';
// plugins
const CleanWebpackPlugin = require('clean-webpack-plugin');
const AutoCleanBuildPlugin = require('webpack-auto-clean-build-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const WebpackChunkHash = require('webpack-chunk-hash');
const AssetsWebpackPlugin = require('assets-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const JavaScriptObfuscator = require('webpack-obfuscator');
const BuildInfo = require('./tools/build-info');
const version = process.env.RELEASE_TAG || BuildInfo.releaseTag;
// Get environment variables to inject into our app.
const getClientEnvironment = require('./config/env');
const env = getClientEnvironment('');
const DEBUG = !process.argv.includes('--production') && process.env.NODE_ENV !== 'production';
const ANALYSER = process.argv.includes('--analyse');
const VERBOSE = process.argv.includes('--verbose');
const GLOBALS = {
'process.env.NODE_ENV': DEBUG ? '"development"' : '"production"',
__DEV__: DEBUG
};
//
const config = {
mode: DEBUG ? 'development' : 'production',
// You may want 'eval' instead if you prefer to see the compiled output in DevTools.
// See the discussion in https://github.com/facebookincubator/create-react-app/issues/343.
devtool: 'cheap-module-source-map',
// These are the "entry points" to our application.
// This means they will be the "root" imports that are included in JS bundle.
// The first two entry points enable "hot" CSS and auto-refreshes for JS.
// context: path.resolve(__dirname, 'src'),
entry: {
main: path.resolve(__dirname, './src/index.js'),
vendors: ['react', 'react-redux', 'redux', 'react-router']
},
resolve: {
extensions: ['.web.js', '.mjs', '.js', '.json', '.web.jsx', '.jsx', ".scss"],
},
// resolve: {
// extensions: ['.js', '.jsx']
// },
output: {
path: path.resolve(__dirname, './build/public/assets'),
publicPath: './assets/',
sourcePrefix: ' ',
filename: '[name].[hash].js',
},
target: 'web',
stats: {
// fallback value for stats options when an option is not defined (has precedence over local webpack defaults)
all: undefined,
// Add asset Information
assets: true,
// Sort assets by a field
// You can reverse the sort with `!field`.
assetsSort: "field",
// Add build date and time information
builtAt: false,
// Add information about cached (not built) modules
cached: false,
// Show cached assets (setting this to `false` only shows emitted files)
cachedAssets: false,
// Add children information
children: false,
// Add chunk information (setting this to `false` allows for a less verbose output)
chunks: false,
// Add namedChunkGroups information
chunkGroups: false,
// Add built modules information to chunk information
chunkModules: false,
// Add the origins of chunks and chunk merging info
chunkOrigins: false,
// Sort the chunks by a field
// You can reverse the sort with `!field`. Default is `id`.
chunksSort: "field",
// `webpack --colors` equivalent
colors: true,
// Display the distance from the entry point for each module
depth: false,
// Display the entry points with the corresponding bundles
entrypoints: false,
// Add --env information
env: false,
// Add errors
errors: true,
// Add details to errors (like resolving log)
errorDetails: true,
// Add the hash of the compilation
hash: false,
// Set the maximum number of modules to be shown
maxModules: 15,
// Add built modules information
modules: false,
warnings: false,
},
module: {
strictExportPresence: true,
rules: [
// All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
// { test: /\.tsx?$/, loader: "awesome-typescript-loader" },
// All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" },
{
test: /\.scss$/,
use: [
"style-loader", // creates style nodes from JS strings
"css-loader?url=false", // translates CSS into CommonJS
"sass-loader" // compiles Sass to CSS, using Node Sass by default
]
},
{
test: /\.css$/,
use: [
"style-loader", // creates style nodes from JS strings
"css-loader?url=false", // translates CSS into CommonJS
]
},
{
test: /\.jsx?$/,
loader: 'babel-loader', /**/
include: [
path.resolve(__dirname, 'src'),
],
query: {
// https://github.com/babel/babel-loader#options
cacheDirectory: DEBUG,
// https://babeljs.io/docs/usage/options/
babelrc: false,
presets: [
'react',
'es2015',
'stage-0',
],
plugins: [
'transform-runtime',
[
'transform-react-remove-prop-types',
'transform-react-constant-elements',
'transform-react-inline-elements',
],
],
},
},
{
test: /\.(jpe?g|png|gif|svg)$/,
use: 'url-loader?limit=100000'
},
{
test: /\.(png|woff|woff2|eot|ttf|svg|otf)(\?v=\d+\.\d+\.\d+)?$/,
use: 'url-loader?limit=100000'
},
{
test: /\.json$/,
loader: 'json-loader'
},
{
test: /\.txt$/,
loader: 'raw-loader'
},
]
},
// devtool: 'source-map',
plugins: [
new CaseSensitivePathsPlugin(),
// webpack 3 scope hoisting
new webpack.optimize.ModuleConcatenationPlugin(),
// Define free variables
// https://webpack.github.io/docs/list-of-plugins.html#defineplugin
new webpack.DefinePlugin({
...GLOBALS,
'process.env.BROWSER': true,
'process.env.API_URL': JSON.stringify(process.env.API_URL),
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
'process.env.VERSION': JSON.stringify(version),
...env.stringified
}),
//
new ExtractTextPlugin({
filename: '[name]-[chunkhash].css',
disable: false,
allChunks: true
}),
// Plugin to replace a standard webpack chunk hashing with custom (md5) one.
new WebpackChunkHash({
algorithm: 'md5'
}),
// save stats
new AssetsWebpackPlugin({
filename: 'build/public/webpack-assets.json'
})
],
optimization: {
splitChunks: {
chunks: 'async',
minSize:
30000,
maxSize:
0,
minChunks:
1,
maxAsyncRequests:
5,
maxInitialRequests:
3,
automaticNameDelimiter:
'~',
name:
true,
cacheGroups:
{
vendors: {
test: /[\\/]node_modules[\\/]/,
priority:
-10
}
,
default:
{
minChunks: 2,
priority:
-20,
reuseExistingChunk:
true
}
}
}
,
occurrenceOrder: DEBUG,
minimizer:
[
new UglifyJsPlugin({
parallel: true,
sourceMap: false,
uglifyOptions: {
mangle: false,
beautify: DEBUG,
minimize: !DEBUG,
// Eliminate comments
comments: false,
// Compression specific options
compress: {
warnings: false,
// Drop `console` statements
drop_console: DEBUG
}
}
})
]
}
,
externals: {
// "react": "React",
// "react-dom": "ReactDOM"
}
}
;
// DEV ONLY Configuration
// Add a bundle analyser viewer
if (ANALYSER) {
config.plugins.push(new BundleAnalyzerPlugin({
analyzerMode: 'static',
openAnalyzer: false
}));
}
if (!DEBUG) {
console.log("Obfuscating ...");
config.plugins.push(new JavaScriptObfuscator({
rotateUnicodeArray: true
}));
}
module.exports = config;
Upvotes: 0
Views: 6397
Reputation: 2159
Ok, sorry, it is because the grid.scss
was not pushed to the remote repository because the ignoreCase
in the .git
config
was set to true. So somehow it was ignore by git. Thats why it worked locally but not in the pipeline.
Upvotes: 2