带有 webextensions 的 vuecli:预编译和加载内容脚本
vuecli with webextensions: Precompile & load content script
我正在使用 vuejs
& vue-cli
创建一个网络扩展。我已经添加了我的内容脚本,以便使用 vue-cli
s 内部 webpack
、s.t.:
进行处理
configureWebpack: {
entry: {
contentScript: "./src/contentScript/contentScript.js"
}
编译成功。我得到了一个 contentScript.js
,一个 webpack 捆绑文件。但是,当我尝试使用以下方式加载此文件时:
chrome.tabs.executeScript({
file: "js/contentScript.js"
});
没有任何反应。事实上,即使 contentScript.js
只包含 console.log('test')
,它似乎也没有像我想象的那样被 webpack
处理,因为在浏览器控制台中执行脚本并没有产生任何东西。
我在这里监督什么?从 vue inspect
我可以看到 js
的以下 webpack
规则:
/* config.module.rule('js') */
{
test: /\.m?jsx?$/,
exclude: [
function () { /* omitted long function */ }
],
use: [
{
loader: '/home/user/Coding/webext/node_modules/cache-loader/dist/cjs.js',
options: {
cacheDirectory: '/home/user/Coding/webext/node_modules/.cache/babel-loader',
cacheIdentifier: '356420a0'
}
},
{
loader: '/home/user/Coding/webext/node_modules/babel-loader/lib/index.js'
}
]
},
我终于明白了!这是因为 splitChunks
将所有 node_module
资产捆绑在一个 vendor
块中。因为我的 contentScript.js
-脚本没有加载这个 vendor
-chunk,所以 webpack
不能做它的事情。这似乎是因为 webpack
本身需要一些 ES-node_modules
。如果 webpack
让我知道它缺少一个块,那将真的很有帮助,但是哦,好吧...... vue.config.js
中的必要配置是:
chainWebpack: config => {
config.optimization.splitChunks(false);
}
我正在使用 vuejs
& vue-cli
创建一个网络扩展。我已经添加了我的内容脚本,以便使用 vue-cli
s 内部 webpack
、s.t.:
configureWebpack: {
entry: {
contentScript: "./src/contentScript/contentScript.js"
}
编译成功。我得到了一个 contentScript.js
,一个 webpack 捆绑文件。但是,当我尝试使用以下方式加载此文件时:
chrome.tabs.executeScript({
file: "js/contentScript.js"
});
没有任何反应。事实上,即使 contentScript.js
只包含 console.log('test')
,它似乎也没有像我想象的那样被 webpack
处理,因为在浏览器控制台中执行脚本并没有产生任何东西。
我在这里监督什么?从 vue inspect
我可以看到 js
的以下 webpack
规则:
/* config.module.rule('js') */
{
test: /\.m?jsx?$/,
exclude: [
function () { /* omitted long function */ }
],
use: [
{
loader: '/home/user/Coding/webext/node_modules/cache-loader/dist/cjs.js',
options: {
cacheDirectory: '/home/user/Coding/webext/node_modules/.cache/babel-loader',
cacheIdentifier: '356420a0'
}
},
{
loader: '/home/user/Coding/webext/node_modules/babel-loader/lib/index.js'
}
]
},
我终于明白了!这是因为 splitChunks
将所有 node_module
资产捆绑在一个 vendor
块中。因为我的 contentScript.js
-脚本没有加载这个 vendor
-chunk,所以 webpack
不能做它的事情。这似乎是因为 webpack
本身需要一些 ES-node_modules
。如果 webpack
让我知道它缺少一个块,那将真的很有帮助,但是哦,好吧...... vue.config.js
中的必要配置是:
chainWebpack: config => {
config.optimization.splitChunks(false);
}