[英]webpack: Module not found: Error: Can't resolve (with relative path)
[英]Webpack can't resolve relative path import express static
我正在开发一个 outlook 插件我有一个快速服务器正在运行。 我正在设置 webpack 因为我需要将 js 转换为 es5 以使其在 Outlook 桌面上工作。 这是简化的项目结构。
/public
/javascripts
ssoAuth.js
/addin
/commmands
commands.js
commands.html
/server
/bin
/helpers
app.js
公用文件夹在我的快递服务器中设置为 static 文件夹
app.use(express.static(path.join(__dirname, '../public'),
我的问题是在 commands.js 中,我使用 es6 模块导入 ssoAuth.js 和相对路径:
import getGraphAccessToken from "/javascripts/ssoAuthES6.js";
当我运行 node./server/app.js 并加载我的 outlook 插件时它工作正常,但是当我想使用 Webpack 捆绑时,导入不起作用,我得到:
ERROR in ./addin/commands/commands.js
Module not found: Error: Can't resolve '/javascripts/ssoAuth.js'
我不知道如何配置 webpack 以允许从公共文件夹导入。
这是我的 webpack 配置文件:
webpack.config.js:
const config = {
devtool: "source-map",
entry: {
polyfill: "@babel/polyfill",
commands: "./addin/commands/commands.js"
},
resolve: {
extensions: [".ts", ".tsx", ".html", ".js"]
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"]
}
}
},
{
test: /\.html$/,
exclude: /node_modules/,
use: "html-loader"
},
{
test: /\.(png|jpg|jpeg|gif)$/,
use: "file-loader"
}
]
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
filename: "commands.html",
template: "./addin/commands/commands.html",
chunks: ["polyfill", "commands"]
})
]};
webpack.server.config.js:
return ({
entry: {
server: './server/bin/www',
},
output: {
path: path.join(__dirname, 'dist'),
publicPath: '/',
filename: '[name].js'
},
target: 'node',
node: {
__dirname: false,
__filename: false,
},
externals: [nodeExternals()],
module: {
rules: [
{
// Transpiles ES6-8 into ES5
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
}
}
]
},
plugins: [
new CopyWebpackPlugin([
{
to: "./public",
from: "./public"
}
])
]})
你能帮忙解决这个问题吗? 我应该使用更好的文件夹结构来使其工作吗?
谢谢
您正在使用绝对路径
import getGraphAccessToken from "/javascripts/ssoAuthES6.js";
// ^ this will look in your topmost directory on your OS
来自commands.js
的相对路径将是:
import getGraphAccessToken from "../../javascripts/ssoAuthES6.js";
或者,您可以通过将以下内容添加到 webpack 配置中来设置 Webpack 以从根目录中查找模块:
{
// ...
resolve: {
modules: [path.resolve(__dirname, "src"), "node_modules"],
},
// ...
}
然后,您可以从任何地方从项目的根目录导入,如下所示:
import getGraphAccessToken from "javascripts/ssoAuthES6.js";
其他几点:
extensions: [".ts", ".tsx", ".html", ".js"]
,因此您不需要为这些导入提供文件扩展名.ts
和.tsx
,但您使用的是.js
文件。 考虑删除 Typescript 扩展tsconfig.json
中的导入路径
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.