[英]Using require.resolve in webpack config yields runtime error: “The provided value”…“is not an absolute path!”
我正在嘗試將exports-loader
與我的webpack配置一起使用,但是在嘗試配置它時遇到了問題。
webpack.config.js
module.exports = {
module: {
rules: [
{
test: require.resolve('./src/globals.js'),
use: 'exports-loader?file,parse=helpers.parse'
}
]
}
};
./src/globals.js
var file = 'blah.txt'
var helpers = {
test: function() { console.log('test something'); },
parse: function() { console.log('parse something'); }
}
./src/index.js
import { file } from './globals.js'
console.log('the file', file);
我的應用程序構建良好,但是當我嘗試運行它時,我得到:
WebpackOptionsValidationError:無效的配置對象。 已使用與API模式不匹配的配置對象初始化Webpack。
- configuration.module.rules [0] .test應該是以下之一:
- configuration.module.rules [0] .test:提供的值“ ./src/globals.js”不是絕對路徑!
確切地說,我了解絕對路徑和相對路徑之間的區別,並且我知道我使用的值是相對路徑。 我的困惑有兩個方面:
require.resolve
允許相對路徑,為什么我不能在這里使用它? 我嘗試為test
屬性使用絕對路徑,如下所示:
test: require.resolve(path.join(__dirname, 'src/globals.js'))
但是當我嘗試運行時出現此錯誤:
錯誤:找不到模塊'/workspace/my-app/dist/src/globals.js
所以我被卡住了。 如何正確配置此加載器以正確引用該文件?
exports-loader
正常工作 導出加載程序是一個Webpack加載程序,它允許將exports
語句動態添加到隨其加載的javascript文件中。 例如,您的globals.js
文件中沒有任何export
,只有file
和helpers
變量,但是通過exports-loader
它可以像具有export
子句一樣工作。
基本上,要使用加載程序,我們必須提供一個test
和一個use
子句。 該test
可以是正則表達式,數組或對象,並且基本上可以確定哪些文件將使用某些加載程序。
use
子句決定將哪些加載程序應用於與test
正則表達式匹配的文件。
在這種情況下,我們應該-例如-指示globals.js
用exports-loader
加載globals.js
:
module: {
rules: [
{
test: /globals.js/,
use: 'exports-loader',
}
]
}
這是-afaik-使用裝載程序的最常用方法。 但是,Webpack具有許多配置選項和不同的有效語法。
一旦這樣做,當webpack找到一個require
或一個globals.js
再import
一個globals.js
文件時,它將使用exports-loader
。
另一方面, exports-loader
通過修改require
調用來工作,以指示其如何在所需文件中提取變量。 如在他們的文檔中:
file.js
const file = 'foo';
app.js
const file = require('exports-loader?file!./file.js');
console.log(file); // foo
因此,基本上,您需要兩件事來使exports-loader
正常工作:
使用require
或import
及其特殊語法。
像往常一樣將加載程序加載到webpack.config.js
中(他們會在其文檔中跳過此步驟)。
相反,您嘗試在webpack.config.js
文件中使用此特定的exports-loader
語法,然后將其與import
。
因此,壞消息是, exports-loader
在每個require
或import
語句中都需要某種特殊的格式來發揮其魔力 。 您只是無法在嘗試時在配置文件中指定此設置(或者,至少我不知道如何設置)。
因此,要使其正常工作,您需要:
webpack.config.js
。 index.js
文件,使其使用exports-loader
magic : import file from 'exports-loader?file!./deps.js'
console.log('the file', file);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.