问题
I am so confused about this. All I want to do is simply break up my javascript into modules, and include them in certain pages. Some pages may need my user-module.js , some pages may not.
I have Googled, read the tutorials, and it's still not working for me.
Here is a simple test case:
1. Include my script from my html
<script src="../js/login-view-model.js"></script>
Now, inside there...
2. TRY to include another module/js file
// LoginViewModel
// I NEED MY IMPORT HERE
import { userService } from '../js/viewModels/user-service.js'
var LoginViewModel = function () {
self = this;
userService.user.sayHello();
}; // End View Model
ko.applyBindings(new LoginViewModel());
Now, inside my user-service.js
user-service.js
let user = {
sayHello: function() { alert("hello") };
}
export {user};
I don't see what I am missing.
Do I need to use another JS library to get this simple example working? I am so lost...lol , please help!
Oh, as you can see I am using KnockoutJS. Not sure if that is the problem.
Thank you.
John
回答1:
(There isn't really a good way to show how to do this in something like jsfiddle, so I appologize for the inline code)
Here is a very basic example of what you're trying to do (minus the knockout part)
One key here is that you need to tell the browser that your script is a module (type="module"
) (see ES6 in the browser: Uncaught SyntaxError: Unexpected token import for some other issues you can run into when not defining type
as module
)
The other key fix to your problem is that you're trying to invoke .sayHello()
in the wrong way.
userService.user.sayHello(); // wrong
userService.sayHello(); // right
You exported
user so you don't need to do .user
, there is no property of user
on your exported object. userService
is already user
Working Example:
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script src="loginviewmodel.js" type="module"></script>
</body>
</html>
View Model
import { user } from "./userservice.js";
user.sayHello();
User Service
let user = {
sayHello: function() { alert("hello"); }
};
export {user};
回答2:
you need a module bundler like webpack for example to take care of that
take your main file as an entry and generate a single JavaScript
file based on your imports.
Example of a simple webpack configuration.
var path = require('path');
module.exports = {
entry: './main.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'output.bundle.js'
}
};
来源:https://stackoverflow.com/questions/56959001/how-to-get-javascripts-import-export-working-do-i-need-transpiler