gpt4 book ai didi

javascript - webpack + shelljs 会抛出 "Error: Cannot find module '/exec-child.js'"

转载 作者:行者123 更新时间:2023-12-01 15:10:08 26 4
gpt4 key购买 nike

我想用shelljs用javascript写一些脚本,因为我想使用一些新的JavaScript特性,所以我使用Babel + webpack将我的代码捆绑到一个单独的bundle js中。

代码很简单:

entry.js

import shell from 'shelljs'

shell.exec('ls')

webpack.conf.js
module.exports = {
mode: "development",
target: 'node',
entry: './entry.js',
output: {
path: __dirname,
filename: './dist/bundle.js'
},
module: {
rules: [{
test: /\.js$/,
use: [{
loader: 'babel-loader', options: {
presets: ['@babel/preset-env']
}
}]
}]
}
}

包.json
{
"scripts": {
"demo": "webpack && node ./dist/bundle.js"
},
"devDependencies": {
"@babel/core": "7.2.2",
"@babel/preset-env": "7.4.2",
"babel-loader": "8.0.6",
"webpack": "4.28.1",
"webpack-cli": "3.2.1"
},
"dependencies": {
"shelljs": "0.8.3"
}
}

当我运行“npm install && npm run demo”时,它会抛出:
Error: Cannot find module '/exec-child.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
webpack:///./node_modules/shelljs/src/common.js?:412
throw e;
^

ShellJSInternalError: ENOENT: no such file or directory, open '/var/folders/gm/t8kf08qn0598qcl_vkxxyhxc0000gr/T/shelljs_d7da547d2136239bb317'
at Object.openSync (fs.js:443:3)
at Object.readFileSync (fs.js:343:35)
at execSync (webpack:///./node_modules/shelljs/src/exec.js?:85:17)
at Object._exec (webpack:///./node_modules/shelljs/src/exec.js?:213:12)
at Object.eval [as exec] (webpack:///./node_modules/shelljs/src/common.js?:348:23)
at eval (webpack:///./entry.js?:5:48)

我不知道为什么。

这里也是这个问题的完整小演示,你可以克隆并运行它:

https://github.com/freewind-demos/javascript-shelljs-webpack-demo

最佳答案

我可以通过修改我的 Webpack 配置来解决这个问题。

ShellJS 使用 node 执行一个名为 exec-child.js 的 JS 文件- code at the time of writing .

问题是捆绑代码不知道该文件在哪里,原因有两个。

  • 您需要指定 node: false除了target: node避免全局模拟。有一篇很好的文章 here .
  • 您需要将文件显式复制到输出目录,因为 __dirname 将指向那里,然后 path.join(__dirname, 'exec-child.js')将是有效的。您可以使用 copy-webpack-plugin .这是 example我正在工作的配置。
  • 关于javascript - webpack + shelljs 会抛出 "Error: Cannot find module '/exec-child.js'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57344652/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com