我有一个电子应用程序,需要读取存储在%appdata%中的文件(或者macOS和linux的等效文件)。我像这样导入文件
const appPath = app.getPath("appData");
const data = await import(appPath + "/app/file.json");如果我从源文件运行代码,它可以工作,但是当我试图与webpack捆绑时,我会得到一个Module not found错误。我知道这是webpack试图对我的进口产品进行分析造成的。
那么,在webpack中是否有一种动态导入文件的方法?
提前感谢!
编辑:我的webpack配置(没有babel,因为我使用的是打字本)
var path = require("path");
const CopyPlugin = require('copy-webpack-plugin');
var nodeExternals = require('webpack-node-externals');
module.exports = {
mode: 'production',
entry: "./src/index.ts",
externals: [nodeExternals()],
output: {
filename: "main.js",
path: path.resolve(__dirname, 'build')
},
node:{
__dirname:false
},
target: "electron-main",
resolve: {
alias: {
['firebase/app']: path.resolve(__dirname, 'node_modules/firebase/app/dist/index.cjs.js'),
['firebase']: path.resolve(__dirname, 'node_modules/firebase/dist/index.node.cjs.js')
}, extensions: ['.ts', '.js']
},
module: {
noParse: "/public/**/*",
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
// {
// test: /\.json$/,
// loader: 'json-loader'
// }
],
},
plugins: [
new CopyPlugin([
{ from: './src/public', to: './public' }
]),
]
}发布于 2020-02-04 11:26:19
通过查看文档,答案似乎在模块方法部分:
()中的动态表达式 不可能使用完全动态的导入语句,例如
import(foo)。因为foo可能是系统或项目中任何文件的任何路径。import()必须至少包含一些有关模块所在位置的信息。..。
不清楚您是否需要在构建时或运行时读取它,如果是前者,那么请确保将文件复制到工作目录(因此该文件被捆绑在构建中),如果后者,则可以使用fs模块在运行时获取该文件。
发布于 2020-02-04 10:51:04
也许您可以尝试动态导入并使用这样的承诺
import(appPath + "/app/file.json").then(data => {
console.log(data)
});发布于 2020-02-04 12:26:27
我想你做不到,但是NormalModuleRpelacementPlugin可能是你问题的解决方案。您可以在构建时使用它,但是它可能取决于环境。
文件路径在代码中是相同的,但是在构建之后,它将被任意更改。
https://webpack.js.org/plugins/normal-module-replacement-plugin/
https://stackoverflow.com/questions/59992773
复制相似问题