I have a new, very barebones project. If I attempt to import json into my entry file (vanilla .js), it works, eg:
import pkg from './package.json';
When I attempt to do the same in a .vue file's <script> block, I get this error during building:
WARNING in ./App.vue?vue&type=script&lang=js& 1:192-195
export 'default' (imported as 'mod') was not found in '-!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use!./node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&' (module has no exports)
All the files are in the same directory.
Can anyone advise on how to alleviate this? I am new to Webpack, so I wonder if there is a specific setting or structure to the loaders that I am missing.
package.json:
{
"scripts": {
"build": "webpack"
},
"dependencies": {
"vue": "^2.7.14"
},
"devDependencies": {
"@babel/core": "^7.22.11",
"@babel/preset-env": "^7.22.10",
"babel-loader": "^9.1.3",
"cross-env": "^7.0.3",
"css-loader": "^6.8.1",
"node-sass": "^9.0.0",
"postcss-loader": "^7.3.3",
"postcss-preset-env": "^9.1.2",
"postcss-url": "^10.1.3",
"sass-loader": "^13.3.2",
"style-loader": "^3.3.3",
"vue-loader": "^15.10.1",
"vue-template-compiler": "^2.7.14",
"webpack": "^5.88.2",
"webpack-cli": "^5.1.4"
}
}
webpack.config.js:
const { VueLoaderPlugin } = require("vue-loader");
const path = require("path");
module.exports = {
devtool: false,
entry: {
main: "./main.js",
},
mode: "development",
output: {
filename: "output.js",
path: path.resolve(__dirname, "dist"),
},
module: {
rules: [
{
test: /\.vue$/,
use: {
loader: "vue-loader",
options: { productionMode: false }
}
},
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: { presets: ['@babel/preset-env'] }
}
},
{
test: /\.scss$/,
use: [
'style-loader',
{
loader: "css-loader",
options: { importLoaders: 2 },
},
'sass-loader'
]
}
],
},
plugins: [
new VueLoaderPlugin()
]
};
What I've tried:
- Removing the .json extension from the package name
- using default or non-default import types
- using json-loader even though json importing is built into webpack now
- adding the .json extension to the vue-loader
- adding the .json extension to the babel-loader