NPM + Browserify 错误:ParseError: 'import' 和 'export' 可能只出现在 'sourceType: module' 中

Posted

技术标签:

【中文标题】NPM + Browserify 错误:ParseError: \'import\' 和 \'export\' 可能只出现在 \'sourceType: module\' 中【英文标题】:NPM + Browserify error: ParseError: 'import' and 'export' may appear only with 'sourceType: module'NPM + Browserify 错误:ParseError: 'import' 和 'export' 可能只出现在 'sourceType: module' 中 【发布时间】:2020-11-03 13:21:31 【问题描述】:

我有两个简单的 js 文件。其中之一应该是导出其内容的模块,该模块将包含在 import 命令中。

第一个 testModule.js:

export function test() 
    console.log('teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeest');

和 main.js:

import * as test from "../src/js/testModule.js"

test.test();

在 package.json 我有两个脚本命令。首先将 es6 翻译为 es5,然后将 es5 结果浏览器化,因为模块。第一个有效。但是第二个给我一个错误。


    "name": "examples-vue",
    "main": "index.js",
    "dependencies": 
        "bootstrap": "^3.4.1",
        "jquery": "^3.4.1",
        "vue": "^2.6.11"
    ,
    "devDependencies": 
        "@babel/cli": "^7.10.4",
        "@babel/core": "^7.10.4",
        "@babel/polyfill": "^7.10.4",
        "@babel/preset-env": "^7.10.4",
        "browserify": "^16.5.1",
        "core-js": "^3.6.5"
    ,
    "scripts": 
        "es5": "babel ./src/js/main.js -o ./js/main.es5.js",
        "browserify": "browserify ./js/main.es5.js -o ./js/bundle.js",
        "build": "npm run es5 && npm run browserify"
    

第一个命令的结果是这样的:

"use strict";

function _typeof(obj)  "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol")  _typeof = function _typeof(obj)  return typeof obj; ;  else  _typeof = function _typeof(obj)  return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; ;  return _typeof(obj); 

var test = _interopRequireWildcard(require("../src/js/testModule.js"));

function _getRequireWildcardCache()  if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache()  return cache; ; return cache; 

function _interopRequireWildcard(obj)  if (obj && obj.__esModule)  return obj;  if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function")  return  default: obj ;  var cache = _getRequireWildcardCache(); if (cache && cache.has(obj))  return cache.get(obj);  var newObj = ; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj)  if (Object.prototype.hasOwnProperty.call(obj, key))  var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set))  Object.defineProperty(newObj, key, desc);  else  newObj[key] = obj[key];    newObj.default = obj; if (cache)  cache.set(obj, newObj);  return newObj; 

test.test();

第二个命令抛出错误:ParseError: 'import' and 'export' may appear only with 'sourceType: module'

在其他问题中仍然是相同的答案。 Browserify 不适用于 es6 语法。但它适用于 es5 文件。这段代码有什么问题?非常感谢您的帮助。

【问题讨论】:

***.com/a/34569845/1529413? 【参考方案1】:

所以 Browserify 的有效语法是

进口

import * as testModule from "./testModule.js";
import  test2module  from "./testModule2.js";

出口

module.exports.test = test;
module.exports.xxx = xxx;

或用于出口

export var test2module = 
    test2: test2,
    aaa: aaa

【讨论】:

以上是关于NPM + Browserify 错误:ParseError: 'import' 和 'export' 可能只出现在 'sourceType: module' 中的主要内容,如果未能解决你的问题,请参考以下文章

使用 browserify 创建反应应用程序有错误

将 browserify 与 npm jQuery 和非 npm 插件一起使用

通过 cosmos:browserify 在 Meteor 中使用 npm 包

将 .vue 发布到 npm 以与 browserify 一起使用

如何使用 typescript / gulp / browserify 导入 npm 模块

json NPM构建任务(无Browserify)