Javascript 无法仅通过复制节点模块来运行应用程序

Javascript 无法仅通过复制节点模块来运行应用程序,javascript,node.js,webpack,npm-install,node-modules,Javascript,Node.js,Webpack,Npm Install,Node Modules,我正在运行一个PreactJS(与ReactJS相同)应用程序。我们使用webapck来构建应用程序。直到最近,开发人员才能够从源存储库复制node_modules文件夹,并能够运行应用程序 最近我们更新了所有节点模块,现在每个开发人员都必须运行npm install命令才能运行应用程序。简单地复制node_modules文件夹不再有效 我知道这是正确的工作方式,但由于我公司方面的限制,开发人员在很多时候都很难从internet获取节点模块。这就是我们采取这种做法的原因 package.json

我正在运行一个PreactJS(与ReactJS相同)应用程序。我们使用webapck来构建应用程序。直到最近,开发人员才能够从源存储库复制node_modules文件夹,并能够运行应用程序

最近我们更新了所有节点模块,现在每个开发人员都必须运行
npm install
命令才能运行应用程序。简单地复制node_modules文件夹不再有效

我知道这是正确的工作方式,但由于我公司方面的限制,开发人员在很多时候都很难从internet获取节点模块。这就是我们采取这种做法的原因

package.json的外观如下:

 "dependencies": {
    "ion-rangeslider": "^2.2.0",
    "jquery": "^3.3.1",
    "preact": "^8.3.1",
    "preact-router": "^2.6.1",
    "preact-async-route": "^2.2.1",
    "promise-polyfill": "^8.1.0",
    "redux": "^4.0.0"
  },
  "devDependencies": {
    "@babel/cli": "^7.0.0",
    "@babel/core": "^7.0.1",
    "@babel/plugin-proposal-class-properties": "^7.0.0",
    "@babel/plugin-proposal-decorators": "^7.0.0",
    "@babel/plugin-syntax-dynamic-import": "^7.0.0",
    "@babel/plugin-transform-react-jsx": "^7.0.0",
    "@babel/preset-env": "^7.0.0",
    "@babel/register": "^7.0.0",
    "@babel/runtime": "^7.0.0",
    "autoprefixer": "^9.1.5",
    "babel-eslint": "^9.0.0",
    "babel-loader": "^8.0.2",
    "compression": "^1.7.3",
    "copy-webpack-plugin": "^4.5.2",
    "core-js": "^2.5.7",
    "cross-env": "^5.2.0",
    "css-loader": "^1.0.0",
    "eslint": "^5.6.0",
    "file-loader": "^2.0.0",
    "html-webpack-plugin": "^3.2.0",
    "isomorphic-fetch": "^2.2.1",
    "less": "^3.8.1",
    "less-loader": "^4.1.0",
    "mini-css-extract-plugin": "^0.4.2",
    "mkdirp": "^0.5.1",
    "ncp": "^2.0.0",
    "optimize-css-assets-webpack-plugin": "^5.0.1",
    "path": "^0.12.7",
    "postcss-loader": "^3.0.0",
    "raw-loader": "^0.5.1",
    "regexp-replace-loader": "^1.0.1",
    "source-map-loader": "^0.2.4",
    "style-loader": "^0.23.0",
    "uglifyjs-webpack-plugin": "^2.0.0",
    "url-loader": "^1.1.1",
    "webpack": "^4.19.0",
    "webpack-bundle-analyzer": "^3.0.2",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.8"
  }
}
我得到这个错误:

C:\MyApp\trunk\node_modules\@xtuc\long\src\long.js:24
export default function Long(low, high, unsigned) {
^^^^^^

SyntaxError: Unexpected token export
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:616:28)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (C:\MyApp\trunk\node_modules\@xtuc\long\index.js:1:80)
  • 正确的解决方案是设置NPM注册表的本地镜像,可能使用类似或的包。您必须在本地网络上设置一次,并确保它可以访问internet
  • npm安装
    可能会根据运行它的机器执行不同的操作。例如,模块可能在MacOS上编译库,但在Windows上使用绑定的二进制文件。如果生成
    node\u模块
    的机器与您的开发机器相同,则复制
    node\u模块
    只能始终适用于每个包。您甚至不应该将
    node\u模块
    检查到源代码控制系统中,只需要
    package.json
    和锁文件
  • 正确的解决方案是设置NPM注册表的本地镜像,可能使用类似或的包。您必须在本地网络上设置一次,并确保它可以访问internet
  • npm安装
    可能会根据运行它的机器执行不同的操作。例如,模块可能在MacOS上编译库,但在Windows上使用绑定的二进制文件。如果生成
    node\u模块
    的机器与您的开发机器相同,则复制
    node\u模块
    只能始终适用于每个包。您甚至不应该将
    node\u模块
    检查到源代码控制系统中,只需要
    package.json
    和锁文件

  • 您正在使用的一个包的格式是node.js无法理解的。它需要
    commonjs
    格式,但它得到的是较新的ES6模块(例如,请参阅以获取更多信息)。通常,NPM上的软件包(安装到
    节点_模块
    中)采用
    commonjs
    格式,因此您不需要传输第三方代码,只需要传输您自己的代码


    奇怪的是,它有一个通用的JS版本。它看起来像(或者另一个transpiler正在尝试读取
    节点\u模块中的每个文件)
    (这不应该发生!)如果您共享您的
    package.json
    ,我们可以查看是否触发了任何脚本。

    您正在使用的一个包的格式是node.js无法理解的。它需要
    commonjs
    格式,但它得到的是较新的ES6模块(例如,有关更多信息,请参阅)。通常在NPM上打包(安装到
    节点的
    模块采用
    commonjs
    格式,因此您无需传输第三方代码,只需传输自己的代码


    奇怪的是,它有一个通用的JS版本。它看起来像(或者另一个transpiler正在尝试读取
    节点\u模块中的每个文件)
    (这不应该发生!)如果您共享您的
    包.json
    ,我们可以查看是否触发了任何脚本。

    我已经更新了问题,以包括我在应用程序中使用的节点模块列表。您刚才所说的有道理。但是您是如何得出结论的
    您正在使用的一个包的格式是node.js无法理解的
    在遇到“导入”或“导出”时,您知道这并不常见。像babel这样的Transpiler负责将“导入/导出”传输到“require/module.exports”。有关格式的更多信息,请参阅。您是否也可以添加webpack.config.js?我非常确定它不排除node_modules文件夹。从您的package.json中,我看不到调用的内容,因为它不完整。它缺少开头大括号和包名等内容,最重要的是脚本。nodej被这部分卡住了在您的示例中:
    export default function Long(low,high,unsigned){^^^^^^^^^语法错误:意外的令牌导出
    我确实在webpack.config`rules:[{test:/\.jsx?$/,exclude:/node_modules/,loader:'babel loader'}中看到了这个代码段,`这是在告诉巴贝尔排除节点模块吗?它不起作用还是只是排除了
    。jsx
    文件我已经更新了这个问题,包括了我在应用程序中使用的节点模块的列表。你刚才说的很有道理。但是你是如何得出结论的
    你正在使用的一个包的格式是node.js的格式es不明白
    一旦你遇到“导入”或“导出”,你就会知道这并不常见。像巴贝尔这样的传输员负责将“导入/导出”传输到“require/module.exports”。有关格式的更多信息,请参阅。您是否也可以添加webpack.config.js?我非常确定它不排除node_modules文件夹。从您的package.json中,我看不到调用的内容,因为它不完整。它缺少开头大括号和包名等内容,最重要的是脚本。nodej被这部分卡住了在您的示例中:
    export default function Long(low,high,unsigned){^^^^^^^^^语法错误:意外的令牌导出
    我确实在webpack.config`rules:[{test:/\.jsx?$/,exclude:/node_modules/,loader:'babel loader'}中看到了这个代码段,`这是告诉babel排除节点模块?它不工作还是只是排除了
    .jsx
    文件
      rules: [
                {
                    test: /\.jsx?$/,
                    exclude: /node_modules/,
                    loader: 'babel-loader'
                }]